高精度加法
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 5 using namespace std; 6 7 char s1[100],s2[100]; 8 9 int x[100],y[100],z[100]; 10 11 int max(int a,int b) 12 { 13 if (a>b) return a; 14 else return b; 15 } 16 17 int main() 18 { 19 scanf("%s%s",s1+1,s2+1);//读入两个字符串 +1是把它们读到1的位置 就不用从0开始了 20 int l1=strlen(s1+1);//第一个数的位数 21 int l2=strlen(s2+1);//第二个数的位数 22 int l=max(l1,l2);//较长的那个位数 23 for (int a=1;a<=l1;a++) 24 x[l1-a+1]=s1[a]-'0';//把第一个字符串翻转之后存到x中去 25 for (int a=1;a<=l2;a++) 26 y[l2-a+1]=s2[a]-'0';//把第二个字符串翻转之后存到y中去 27 for (int a=1;a<=l;a++) 28 z[a]=x[a]+y[a];//把它们加起来后存到z里面去 29 int b=0;//b代表从低位进了多大的数上来 30 for (int a=1;a<=l;a++) 31 { 32 z[a]=z[a]+b;//进上来的数 33 b=z[a]/10;//更新b 34 z[a]=z[a] % 10;//只保留最低位 35 } 36 if (b!=0)//还有进位 37 { 38 l++;//位数+1 39 z[l]=b;//更新最高位 40 } 41 for (int a=l;a>=1;a--) 42 printf("%d",z[a]); 43 printf("\n");//输出 44 45 return 0; 46 }
View Code
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 5 using namespace std; 6 7 char s1[100],s2[100]; 8 9 int x[100],y[100],z[100]; 10 11 int max(int a,int b) 12 { 13 if (a>b) return a; 14 else return b; 15 } 16 17 int main() 18 { 19 scanf("%s%s",s1+1,s2+1);//读入两个字符串 +1是把它们读到1的位置 就不用从0开始了 20 int l1=strlen(s1+1);//第一个数的位数 21 int l2=strlen(s2+1);//第二个数的位数 22 int l=max(l1,l2);//较长的那个位数 23 for (int a=1;a<=l1;a++) 24 x[l1-a+1]=s1[a]-'0';//把第一个字符串翻转之后存到x中去 25 for (int a=1;a<=l2;a++) 26 y[l2-a+1]=s2[a]-'0';//把第一个字符串翻转之后存到y中去 27 for (int a=1;a<=l;a++) 28 z[a]=x[a]+y[a];//把它们加起来后存到z里面去 29 int b=0;//b代表从低位进了多大的数上来 30 for (int a=1;a<=l;a++) 31 { 32 z[a]=z[a]+b;//进上来的数 33 b=z[a]/10;//更新b 34 z[a]=z[a] % 10;//只保留最低位 35 } 36 if (b!=0)//还有进位 37 { 38 l++;//位数+1 39 z[l]=b;//更新最高位 40 } 41 for (int a=l;a>=1;a--) 42 printf("%d",z[a]); 43 printf("\n");//输出 44 45 return 0; 46 }