/************************************* 大整数加法 求两个不超过200位的非负数的和 不能存在先导0 ***************************************/ #include <iostream> #include <cstring> using namespace std; int main(){ int a[2000],b[2000],c[2000]; char ca[2000],cb[2000]; int x=0; // int存储计算。即数字。char存储输入,x是后面用到的进位计数 cin>>ca>>cb; cout<<ca<<endl<<cb<<endl; // 检查一下没有溢出 int length_a = strlen(ca); int length_b = strlen(cb); int length_c = 1; for(int i=0;i<length_a;i++){ a[i] = ca[i]-48; // 减去48是ASCII码数字0的起始位置 } for(int i=0;i<length_b;i++){ b[i] = cb[i]-48; } while(length_c<=length_a||length_c<=length_b){ // 和分别小于两个数时进行逐位相加 c[length_c] = a[length_c-1]+b[length_c-1]+x; // 这时候其实使用do while 更好。使用while时候因为length_c起始值是1 为了加入循环不能从0开始。故而将ab长度减一 x = c[length_c]/10; c[length_c] = c[length_c]%10; length_c++; } c[length_c]=x; cout<<length_a<<length_c<<endl; // 最后一位进位 int k=0; if(c[length_c]!=0) { k= length_c; } else{ k = length_c-1; } // 判断首位是否有进位 for(int j=k;j>=1;j--){ cout<<c[j]; } // 逐位打印避免显示先导0 return 0; }