/* 【程序32】 大数相加 * 题目:求出两个非常大的数的和,例如:123456789123456+123456789 * 程序分析:和非常大,int、long、long long 等数据类型都装不下这个数怎么办?采用数组方式求。 */ #include <stdio.h> #include <string.h> //strlen() memset() #define SIZE 1000 void add_oper(const char num1[], const char num2[]); void output(int num[], int len); int main(int argc, char *argv[]) { char num1[SIZE] = {}; char num2[SIZE] = {}; puts("Input number1:"); scanf("%s", num1); fputs("Input number2:\n", stdout); scanf("%s", num2); printf("Result = "); add_oper(num1, num2); return 0; } // 运算 void add_oper(const char num1[], const char num2[]) { unsigned int len1 = strlen(num1); unsigned int len2 = strlen(num2); int result_add[len1+len2]; memset(result_add, 0, sizeof(result_add)); // 转换并相加 for (int i=len1-1; i>=0; i--) { result_add[i+len2] += num1[i] - '0'; } for (int j=len2-1; j>=0; j--) { result_add[j+len1] += num2[j] - '0'; } // 进位 for (int i=len1+len2-1; i>=0; i--) { result_add[i-1] += result_add[i]/10; result_add[i] %= 10; } output(result_add, len1+len2); } // 输出 void output(int result[], int len) { int k, n = 0; while (result[n] == 0){n++;} for (k=n; k<len; k++) { if ((len-k)%3 == 0 && k != n) // 倒数每隔3位输出一个逗号“,” printf(","); printf("%d", result[k]); }//for printf("\n"); }
结果:
<c语言经典100例>c32 大数相加
最新推荐文章于 2022-08-26 21:33:00 发布