题目来源:
http://bailian.openjudge.cn/practice/2981/
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
题意描述:
输入两行都不超过200位的非负整数
计算并输出相加后的结果(去除前导零)
解题思路:
先将str1和str2都逆置(自定义逆置函数或者逆序存储)
取两者较长位数的长度,将短数补齐
一一对应计算
最后去除结果的前导零输出即可
程序代码:
1 #include<stdio.h> 2 const int N=230; 3 #include<string.h> 4 void strr(char *str); 5 int main() 6 { 7 char str1[N],str2[N]; 8 int sum[N],l1,l2,l,i,j; 9 while(scanf("%s%s",str1,str2)!=EOF) 10 { 11 strr(str1); 12 strr(str2); 13 l1=strlen(str1); 14 l2=strlen(str2); 15 if(l1>=l2) 16 { 17 l=l1; 18 for(i=l2;i<l;i++) 19 str2[i]=‘0‘; 20 } 21 else 22 { 23 l=l2; 24 for(i=l1;i<l;i++) 25 str1[i]=‘0‘; 26 } 27 if(l==1 && str1[0]==‘0‘ && str2[0]==‘0‘) 28 { 29 printf("0\n"); 30 continue; 31 } 32 33 memset(sum,0,sizeof(sum)); 34 for(i=0;i<l;i++) 35 { 36 sum[i] += str1[i]-‘0‘+str2[i]-‘0‘;//一一对应-‘0‘ 37 if(sum[i] > 9) 38 { 39 sum[i] %= 10; 40 sum[i+1]++;//进位 41 } 42 } 43 44 for(j=i;j>=0;j--) 45 if(sum[j] > 0)//去掉前导零 46 break; 47 for(i=j;i>=1;i--) 48 printf("%d",sum[i]); 49 printf("%d\n",sum[i]); 50 } 51 return 0; 52 } 53 void strr(char *str) 54 { 55 int i,l,t; 56 l=strlen(str); 57 for(i=0;i<l/2;i++){ 58 t=str[i]; 59 str[i]=str[(l-1)-i]; 60 str[(l-1)-i]=t; 61 } 62 }
易错分析:
1、注意0 + 0 的情况,判断时与字符‘0’比较而不是0
2、逆置函数需要自写
时间: 2024-10-08 21:38:42