求两个超级大的整数的和。
//超大数的加法 #includeint main() { //定义两个超大数 char str_num1[] = "187356192873256918723591873264981267345981243756198234759178378256989168745616"; char str_num2[] = "21384619376598174356198734519263539284510874356"; //求两个超大数的长度 int str_num1_len = sizeof(str_num1) - 1; int str_num2_len = sizeof(str_num2) - 1; //交换,将较长的数作为str_num1,较短的数作为str_num2 if(str_num1_len < str_num2_len) { int tmp = str_num1_len; str_num1_len = str_num2_len; str_num2_len = tmp; // char tmp_arry[] = {0}; // tmp+arry = str_num1; // str_num1 = str_num2; // str_num2 = tmp_arry; } //定义一个变量,作为进位标志 int jinwei = 0; //循环从最低位开始相加 for(int i = str_num1_len - 1; i >= 0; i--) { //如果较短的数已经相加完了,则通过是否需要进位判断较长的数是否需要进位 if(str_num1_len - i >= sizeof(str_num2)) { //直到不需要进位时,退出循环 while(jinwei != 0) { str_num1[i] = str_num1[i] - '0' + jinwei; jinwei = str_num1[i] / 10; str_num1[i] = str_num1[i] % 10 + '0'; i--; } break; } //两个数的各个位数相加 int sum = (str_num1[i] - '0') + (str_num2[str_num2_len - 1] - '0') + jinwei; //进位 jinwei = sum / 10; //将相加后的个位数赋值给str_num1的对应位 str_num1[i] = sum % 10 + '0'; // printf("str_num1[%d] = %d,str_num2[%d] = %dn",i,str_num1[i] - '0',str_num2_len - 1,str_num2[str_num2_len - 1] - '0'); str_num2_len--; } //输出结果 printf("%s,%ldn",str_num1,sizeof(str_num1)); return 0; }
程序运行结果:



