给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。
读入两个用空格隔开的正整数
输出A-B的值
3 12
-9
两个正整数的位数不超过500位
这里在大数传入的时候我选择的是字符串接收,然后再将字符数组转化成整数数组,
并保证a数组大于b数组
#include<stdio.h> #include<string.h> int main(){ char c[505], d[505]; int sum[505], a[505], b[505]; memset(sum, 0, sizeof(sum)); /*gets_s(c); gets_s(d);*/ scanf("%s%s", c, d); int i, j,k, tmp, t,flag = 0; if (strlen(c) > strlen(d) || strlen(c) == strlen(d) && strcmp(c, d) >= 0){ for (i = strlen(c) - 1, j = 0; i >= 0; i--, j++) a[j] = c[i] - '0'; for (i = strlen(d) - 1, k = 0; i >= 0; i--, k++) b[k] = d[i] - '0'; } else{ flag = 1; for (i = strlen(d) - 1, j = 0; i >= 0; i--, j++) a[j] = d[i] - '0'; for (i = strlen(c) - 1, k = 0; i >= 0; i--, k++) b[k] = c[i] - '0'; } t = 0; for (i = 0; i < k; i++){ tmp = a[i] - b[i] - t; if (tmp < 0){ tmp += 10; t = 1; } else t = 0; sum[i] = tmp; } while (i < j){ tmp = a[i] - t; if (tmp < 0){ tmp += 10; t = 1; } else t = 0; sum[i++] = tmp; } for (i = 501; sum[i] == 0; i--); if (flag == 1) printf("-"); while (i >= 0) printf("%d", sum[i--]); puts(""); return 0; }
原文地址:http://blog.csdn.net/u013174702/article/details/44173975