杭电oj1002题

在这里插入图片描述这一题相比前两题来说还是有些难度的,
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;
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值