http://blog.csdn.net/u010258605/article/details/44308149
参考自以上博客。
/** Description: Arguments: Returns: (1) 数据的输入 (2) 数据的存储 (3)数据的运算:进位和借位 (4)结果的输出:小数点的位置和处于多余的0 */ #include <cstdio> #include <cstring> int main() { char a[500],b[500]; scanf("%s %s",a,b); int lena=strlen(a),lenb=strlen(b); int aa[500],bb[500],cc[500]; memset(aa,0,sizeof(aa)); memset(bb,0,sizeof(bb)); memset(cc,0,sizeof(cc)); //将字符串转换成数组 for(int i=0;i<=lena-1;i++) { aa[lena-i]=a[i]-48;//倒着储存数字a[]={1,2,3},aa[]={3,2,1};从1开始的, } for(int i=0;i<=lenb-1;i++) { bb[lenb-i]=b[i]-48;//倒着储存数字a[]={1,2,3},aa[]={3,2,1};从1开始的, } // 运算 进位和借位 int th=1,x=0;//竖式运算时个位对齐,一位一位往前加; //x为进位的数字,th为第几位; while(th<=lena||th<=lenb) { cc[th]=aa[th]+bb[th]+x; x=cc[th]/10;//进位是几; cc[th]%=10;//本位是几; th++;//位数加一 } cc[th]=x; if(cc[th]==0)//如果最高位为零就不输出,所以位数减一; { th--; } for(int i=th;i>=1;i--) { printf("%d",cc[i]); } printf(" "); }