1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
int TotalNum = 2000;
// 反转字符串 char* turnStr(char * s, int len) {
char tmp; for (int i = 0; i < len / 2; i ++) { tmp = s[i]; s[i] = s[len - 1 - i]; s[len - 1 - i] = tmp; } return s; } // 计算大整数 void aAddb(int n) { char a[TotalNum], b[TotalNum]; char sum[TotalNum]; scanf("%s%s", a, b); printf("Case %d:n",n + 1); printf("%s + %s = ", a, b); char *s = turnStr(a, (int)strlen(a)); char *t = turnStr(b, (int)strlen(b));
int k = 0, c = 0, i = 0; memset(sum, 0, TotalNum); for (i = 0; i < strlen(s) && i < strlen(t) ; i ++) { c = s[i] + t[i] - 2 * '0' + k; sum[i] = c % 10 + '0'; k = c / 10; } if (i == strlen(s) && i == strlen(t)) { //同等长度 } else if (i == strlen(s)) { // t较长 for (; i < strlen(t); i ++) { c = t[i] - '0' + k; sum[i] = c % 10 + '0'; k = c / 10; } } else if (i == strlen(t)) { // s较长 for (; i < strlen(s); i ++) { c = s[i] - '0' + k; sum[i] = c % 10 + '0'; k = c / 10; } } if (k != 0) { sum[i] = k % 10 + '0'; if (k / 10 > 0) { sum[i + 1] = k / 10 + '0'; } } printf("%sn", turnStr(sum, (int)strlen(sum))); }
int main(int argc, const char * argv[]) {
int n = 0; //printf("total case:"); scanf("%d",&n); for (int i = 0; i < n; i ++) { aAddb(i); if (i != n - 1) { printf("n"); } } return 0; }
|
近期评论