c语言经典题之大数相加
程序员文章站
2022-04-15 19:31:40
经典题之大数相加
/*
【程序32】 大数相加
* 题目:求出两个非常大的数的和,例如:123456789123456+123456789
* 程序分析:和非常大,int、long、l...
经典题之大数相加
/* 【程序32】 大数相加 * 题目:求出两个非常大的数的和,例如:123456789123456+123456789 * 程序分析:和非常大,int、long、long long 等数据类型都装不下这个数怎么办?采用数组方式求。 */ #include #include //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); 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) { printf("result = "); int k, n = 0; while (result[n] == 0){n++;} for (k=n; k
结果: