
题目
解决代码及点评
/************************************************************************/ /* 77. 大数相加。 写一个程序,实现对任意长的两个大整数(例如100位)进行相加。每个数可用以下形式存放, 例如整数179534679198可放于数组N中,其中: N[1]=198, N[2]=679, N[3]=534, N[4]=179 把两个数组中的元素一一相加,并根据需要进行进位。 要求: 1) 输出一个大数时中间不允许有空格, 如上述N数组输出时不允许输出: 179 534 679 198 而应输出 179534679198 2) 输出的数据中间的零不能用空格代替。 假设N[1]=23, N[2]=5, N[3]=534, N[4]=179时应输出 179534005023 而不应输出 179534 5 23 思考: 一个数组元素存放一位数时应如何修改程序? */ /************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> int GETWS77(int num) { int count=0; while(num) { count++; num/=10; } return count; } void Printfarr(int * arr,int n) { int i=0; while(arr[i]==0) i++; for(;i<n;i++) { if (GETWS77(arr[i])==3) { printf("%d",arr[i]); } else { for (int j=0;j<3-GETWS77(arr[i]);j++) { printf("%d",0); } printf("%d",arr[i]); } } printf("\n"); } int * ADD77(int *arr1,int * arr2,int n) { int JW=0; for (int i=n-1;i>=0;i--) { if (arr1[i]+arr2[i]+JW>1000) { arr1[i]=(arr1[i]+arr2[i]+JW)%1000; JW=(arr1[i]+arr2[i]+JW)/1000; } else { arr1[i]=(arr1[i]+arr2[i]+JW); JW=0; } } return arr1; } void main() { int arr[30]={0}; arr[25]=192; arr[26]=123; arr[27]=154; arr[28]=176; arr[29]=98; Printfarr(arr,30); int brr[30]={0}; brr[25]=192; brr[26]=123; brr[27]=154; brr[28]=176; brr[29]=998; Printfarr(brr,30); ADD77(arr,brr,30); Printfarr(arr,30); system("pause"); }
代码编译以及运行
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
程序运行结果
代码下载
http://download.csdn.net/detail/yincheng01/6681845
解压密码:c.itcast.cn