大明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。进行大数相加。
程序代码:
#include<stdio.h>
#include<string.h>
char a[500],b[500];
int c[500];
int main()
{
int i,len1,len2,x,y,f,j,len;
while(scanf("%s%s",a,b)!=EOF)
{
len1=strlen(a);
len2=strlen(b);
//对齐小数点,位数补零
f=0;
for(i=0;i<len1;i++)
if(a[i]=='.')
{
f=1;
x=i;
break;
}
if(f==0)
{
x=len1;
a[len1]='.';
a[len1+1]='\0';
len1=strlen(a);
}
f=0;
for(i=0;i<len2;i++)
if(b[i]=='.')
{
f=1;
y=i;
break;
}
if(f==0)
{
y=len2;
b[len2]='.';
b[len2+1]='\0';
len2=strlen(b);
}
if((len1-x)>(len2-y))
{
for(i=len2;i<len2+((len1-x)-(len2-y));i++)
b[i]='0';
b[len2+((len1-x)-(len2-y))]='\0';
len2=strlen(b);
}
if((len2-y)>(len1-x))
{
for(i=len1;i<len1+((len2-y)-(len1-x));i++)
a[i]='0';
a[len1+((len2-y)-(len1-x))]='\0';
len1=strlen(a);
}
if(x>y)
{
for(i=len1;i>=(len1-len2);i--)
{
b[i]=b[i-(len1-len2)];
}
for(i=len1-len2-1;i>=0;i--)
{
b[i]='0';
}
len2=strlen(b);
}
else
{
for(i=len2;i>=(len2-len1);i--)
{
a[i]=a[i-(len2-len1)];
}
for(i=len2-len1-1;i>=0;i--)
{
a[i]='0';
}
len1=strlen(a);
}
memset(c,0,sizeof(c));
//两个数都为整数情况
if(a[len1-1]=='.')
{
j=0;
for(i=len1-2;i>=0;i--)
{
c[j]+=(a[i]-'0')+(b[i]-'0');
if(c[j]>=10)
{
c[j]=c[j]-10;
c[j+1]++;
}
j++;
}
f=0;
for(i=j;i>=0;i--)
{
if(f==0&&c[i]==0)
continue;
else
{
f=1;
printf("%d",c[i]);
}
}
printf("\n");
}
else
{
j=0;
for(i=len1-1;a[i]!='.';i--)
{
c[j]+=(a[i]-'0')+(b[i]-'0');
if(c[j]>=10)
{
c[j]=c[j]-10;
c[j+1]++;
}
j++;
}
f=i-1;
if(c[j]==1)
c[j+1]++;
c[j]=-1;
j++;
for(i=f;i>=0;i--)
{
c[j]+=(a[i]-'0')+(b[i]-'0');
if(c[j]>=10)
{
c[j]=c[j]-10;
c[j+1]++;
}
j++;
}
len=j;
//去多余0
for(i=len;i>=0;i--)
{
if(c[i]==0)
continue;
else
{
len=i;
break;
}
}
for(i=0;i<=len;i++)
{
if(c[i]==0)
continue;
else
{
f=i;
break;
}
}
// .*** 情况
if(c[len]==-1)
printf("0");
for(i=len;i>f;i--)
{
if(c[i]!=-1)
printf("%d",c[i]);
else
printf(".");
}
if(c[f]!=-1)
printf("%d",c[f]);
printf("\n");
}
}
return 0;
}