这一题相比前两题来说还是有些难度的,
1.数的位数小于1000,所以不能简单的用int类型相加,于是我就考虑用char类型的数组存放数据,然后再转化成int型运算。
2.类型转化的时候有一点要注意,我刚开始使用(int)(a[i])这种方式,但是不行,我也不知道是为啥,有知道的可以跟我讨论,然后我就改成了a[i]-'0’这种,顺利解决
3.用这种平台做题空格和空行这些细节一定要考虑到位,我就是输出结果的时候 Case1:1+2=3 这样等式之间没有加空格,浪费了很久。还有就是每两个数据之间要有一个空行。
总结一下这一题的思路吧,字符数组存放数据,记录下数组长度,从尾端(即数字最低位)开始,逐个取数并相加,存放的时候也从数组尾部开始存c[k]。将进位放入c[k-1],每次都先加上进位再与10运算。计算结束之后,读取结果时,先把k++,知道找到第一个c[k]不等于0,此时结果最高位就找到了,往后依次遍历输出就行了。
ac的程序如下:
#include<stdio.h>
#include<string.h>
int main(){
int n,p=0;
scanf("%d",&n);
while(n--){
char a[1001],b[1001];
int c[1001]={0};
int i,j,k;
scanf("%s %s",a,b);
i=strlen(a)-1;
j=strlen(b)-1;
//printf("%d %d\n",i,j);
//printf("%s",a);
//printf("%s",b);
int sum=0;
for(k=1000;i>=0||j>=0;k--){ //个位在最右边
if(i<0&&j>=0){ //b比a长
sum+=b[j--]-'0';
//printf("%d\n",sum);
}
else if(j<0&&i>=0) {
sum+=a[i--]-'0';
//printf("%d\n",sum);
}
else sum=(a[i--]-'0')+(b[j--]-'0'); //转换成int 型
//printf("%d\n",(int)(b[j--]));
//printf("%d\n",sum);
sum+=c[k]; //考虑进位
int q=k-1;
c[q]=sum/10;
c[k]=sum%10;
//printf("%d %d\n",c[q],c[k]);
sum=0;
}
p++;
printf("Case %d:\n",p);
printf("%s + %s = ",a,b);
while(c[k]==0) k++; //找到最高位从最高位开始输出结果
//printf("%d\n",k);
for(k;k<1001;k++){
printf("%d",c[k]);
}
if(n>0) printf("\n\n"); //两个数据之间有一个空行
else printf("\n");
}
return 0;
}