大明A+B(大数相加)解题报告

Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
 

Input
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
 

Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
 

Sample Input
1.1 2.9 1.1111111111 2.3444323343 1 1.1
 
Sample Output
4 3.4555434454 2.1


思路:小数整数分开计算,先计算小数(注意后导0和全为0情况,例如1.2000000  1.0)。再计算整数(注意前导0和只有0情况),整数输出部分真的是搞死了,对于极端情况还是欠考虑,不好设置其中的开关条件
附上借鉴的大佬解法:感谢大佬

代码:
#include<stdio.h>
#include<string.h>
int main()
{
	char a[410],b[410];
	int a1[410],a2[410],b1[410],b2[410],p1,p2,lena,lenb,i,j,point1,point2;
	while(scanf("%s%s",a,b)!=EOF)
	{
		memset(a1,0,sizeof(a1));//整数 
		memset(a2,0,sizeof(a2));//小数 
		memset(b1,0,sizeof(b1));//整数 
		memset(b2,0,sizeof(b2));//小数 
		lena=strlen(a);
		lenb=strlen(b);
		p1=lena;		
		for(i=0;i<lena;i++){
			if(a[i]=='.'){
				p1=i;	//整数长度 
				break;
			}
		}
		p2=lenb;			
		for(i=0;i<lenb;i++){
			if(b[i]=='.'){
				p2=i;	//整数长度 
				break;
			}
		}
		for(i=0;i<p1;i++){
			a1[p1-1-i]=a[i]-'0';		// 整数转移 (倒置) 
		}
		for(j=0,i=p1+1;i<lena;i++,j++){
			a2[j]=a[i]-'0';		//小数转移 
		}
		for(i=0;i<p2;i++){
			b1[p2-1-i]=b[i]-'0';		// 整数转移 (倒置)
		}
		for(j=0,i=p2+1;i<lenb;i++,j++){
			b2[j]=b[i]-'0';		//小数转移 
		}

		for(i=400;i>0;i--){		//小数相加
			a2[i]=a2[i]+b2[i];
			if(a2[i]>=10){
				a2[i]-=10;
				a2[i-1]++;
			}
		}
		a2[i]=a2[i]+b2[i];
		if(a2[i]>=10){
			a2[i]-=10;
			a1[0]++;
		}
		point1=-1;
		for(i=400;i>=0;i--){		//小数除去后导0
			if(a2[i]!=0){
				point1=i;	//找到小数最末尾不为0的位置 
				break;			
			}
		}
		lena=p1;lenb=p2;
		int len=lena>lenb?lena:lenb;	//整数相加 
		for(i=0;i<len;i++){
			a1[i]+=b1[i];
			if(a1[i]>=10){
				a1[i]-=10;
				a1[i+1]++;
			}
		}
		point2=0;
		for(j=i;j>=0;j--){		//判断、除去前导0 
			if(a1[j]!=0){
				point2=1;
			}
			if(point2){
				printf("%d",a1[j]);
			}
		}
		if(point2==0){
			printf("0");
		}
		if(point1!=-1){
			printf(".");
			for(i=0;i<=point1;i++){
				printf("%d",a2[i]);
			}
		}
		printf("\n");
	}
	return 0;	
}

终于搞腚了



posted @ 2017-12-17 17:51  KirinSB  阅读(553)  评论(0编辑  收藏  举报