A + B Problem II(大数相加)

#杭电
题目
原答案
答案非原创!!!


#include <stdio.h>
#include <string.h>
int main(){

	int n,s=0;
	scanf("%d",&n);  						//测试次数
	while(n--)
	{ 
		s++;								//case数	
		char str1[1000]={0},str2[1000]={0}; //字符串接受
		int a1[1001]={0},a2[1001]={0};       //为之后转数组
		scanf("%s%s",str1,str2); 			//接收数据
		int len1=strlen(str1),len2=strlen(str2); //长度

		int i,j,k=0;		//转int型
		for(i=len1-1;i>=0;i--)       
			a1[k++]=str1[i]-'0';
		k=0;
		for(i=len2-1;i>=0;i--)
			a2[k++]=str2[i]-'0';

		k= len1>len2?len1:len2;  			//大数在前

		for(j=0;j<k;j++)					//求和 进位
		{
			a1[j] += a2[j];
			if(a1[j]>=10)      
				{
					a1[j] -=10;
					a1[j+1] +=1;
				}
		}
 		
 		printf("Case %d:\n",s);
 		printf("%s + %s = ",str1,str2);
 		if(a1[k]==0)						//第一位为0时
		{
				for(i=k-1;i>=0;i--)
					printf("%d",a1[i]);
		}
		else{
			for(i=k;i>=0;i--)
					printf("%d",a1[i]);
		}
		printf("\n");
 		if(n>0) printf("\n");
	}
}

1.当大数运算时 用字符串进行运算
2.注意数组的存储 【0-9】

if(a1[j]>=10)      
				{
					a1[j] -=10;
					a1[j+1] +=1;
				}

3.注意最高位为0的情况

if(a1[k]==0)						//第一位为0时
		{
				for(i=k-1;i>=0;i--)
					printf("%d",a1[i]);
		}
		else{
			for(i=k;i>=0;i--)
					printf("%d",a1[i]);
		}

猜你喜欢

转载自blog.csdn.net/yumy_buie/article/details/88132200
今日推荐