# include <stdio h=""> # include <string h=""> int main() { int Add(char a[], char b[], char sum[]);//定义大数相加函数 void print(char sum[], int result_len);//定义输出函数 char a[101], b[101], sum[102];//以字符方式输入两个大数; int len; gets(a); gets(b); len = Add(a, b, sum);//将两个大数的首地址传入函数中; print(sum, len);//输出最终结果; return 0; } int Add(char a[], char b[], char sum[]) { int i = 0; int c = 0;//表示进位 char ma[101] = {"0"}; char nb[101] = {"0"}; memset(sum, 0, 102 * sizeof(char));//将char sum[102]清零 //以下字符串反转且字符串变数字 int lenA = strlen(a); int lenB = strlen(b); int result_len = lenA > lenB ? lenA : lenB;//将a,b中较长的数组长度赋给result_len(存放结果的数组的长度) for(i = 0; i < lenA; i++)//将a,b中的数字字符变为数字并逆序存入ma[]与mb[]中 { ma[i] = a[lenA - i - 1] - '0'; } for(i = 0; i < lenB; i++) { nb[i] = b[lenB - i - 1] - '0'; } //位运算 for(i = 0; (i < lenA) || (i < lenB); i++) { sum[i] = (ma[i] + nb[i] + c) % 10 + '0';//得到末位 c = (ma[i] + nb[i] + c) / 10;//得到进位 } if (c) { result_len++;//若最终结果比较长的数组还长,则存放最终结果的数组长度增加一,并给sum[result_len - 1]赋值'1'(因为第一位若存在进位,只可能为1) sum[result_len - 1] = '1'; } return result_len; } void print(char sum[], int result_len) { int j = 0; for(j = result_len - 1; j >= 0; j--) { printf("%c", sum[j]); } printf("\n"); } </string></stdio>