大数字相加

首先建立字符串录入大数字,然后反转字符串,然后利用 字符串中的元素-‘0‘ 后相加得到数组
再将数组中大于等于10的数字向前进位,最后得到结果字符串
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">
#include<stdio.h>
#include<string.h>
int main(){
	struct longNum{
		char num[1001];
		int len;
	};
	int c;
	scanf("%d",&c);
	longNum theNum[c][2];
	for(int i=0;i<c;i++){
		scanf("%s %s",&theNum[i][0].num,&theNum[i][1].num);
	}
	for(int i=0;i<c;i++){		
		for(int j=0;j<2;j++){
			theNum[i][j].len=strlen(theNum[i][j].num);
		}
	}
	char temp;
	for(int i=0;i<c;i++){
		for(int j=0;j<2;j++){
			for(int z=0;z<theNum[i][j].len/2;z++){
				temp=theNum[i][j].num[z];
				theNum[i][j].num[z]=theNum[i][j].num[theNum[i][j].len-1-z];
				theNum[i][j].num[theNum[i][j].len-1-z]=temp;
			}
		}
	}
	int result[c][1001];
	memset(result,0,sizeof(result)); 
	for(int i=0;i<c;i++){
		int count=0;
		while(theNum[i][0].len>0&&theNum[i][1].len>0){
				result[i][count]+=theNum[i][0].num[count]-'0'+theNum[i][1].num[count]-'0';	
				count++;
				theNum[i][0].len--;
				theNum[i][1].len--;
			}
			if(theNum[i][0].len>0){
				while(theNum[i][0].len>0){
					result[i][count]+=theNum[i][0].num[count]-'0';
					count++;
					theNum[i][0].len--;	
				}
			}
			if(theNum[i][1].len>0){
				while(theNum[i][1].len>0){
					result[i][count]+=theNum[i][1].num[count]-'0';
					count++;
					theNum[i][1].len--;	
				}
			}
			for(int j=0;j<1002;j++){
				if(result[i][j]>=10){
					result[i][j]-=10;
					result[i][j+1]++;
				}
			}	
				for(int j=0;j<2;j++){
					theNum[i][j].len=strlen(theNum[i][j].num);
				}
				for(int j=0;j<2;j++){
					for(int z=0;z<theNum[i][j].len/2;z++){
						temp=theNum[i][j].num[z];
						theNum[i][j].num[z]=theNum[i][j].num[theNum[i][j].len-1-z];
						theNum[i][j].num[theNum[i][j].len-1-z]=temp;
					}
				}
			printf("Case %d:\n%s + %s = ",i+1,theNum[i][0].num,theNum[i][1].num);
			int t=1001;
			while(t--,result[i][t]==0);
				for(;t>=0;t--){
					printf("%d",result[i][t]);
				}
				if(i!=c-1)
				printf("\n\n");
				else
				printf("\n");
		}
	
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值