话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做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
说真的,= =不得不吐槽一下出题人,题目都说了正的小数A和B,那为什么有整数情况,第一个代码纪念一下把A B都当成整数的情况
#include
#include
char a[401],b[401];
int str1[401],str2[401],str3[401],str4[401],str5[401],str6[401];
int main()
{
int len1,len2,i,median1,median2,k2,k1,max1,max2;
while(scanf("%s%s",a,b)!=EOF)
{
memset(str1,0,sizeof(str1));
memset(str2,0,sizeof(str2));
memset(str3,0,sizeof(str3));
memset(str4,0,sizeof(str4));
memset(str5,0,sizeof(str5));
memset(str6,0,sizeof(str6));
len1=strlen(a);
len2=strlen(b);
for(i=0;imedian2)
max1=median1;
else
max1=median2;
if(len1-1-median1>len2-1-median2)
max2=len1-median1-1;
else
max2=len2-median2-1;
k2=0;
for(i=max2-1;i>=0;i--)
{
str5[i]=(str2[i]+str4[i]+k2)%10;
k2=(str2[i]+str4[i]+k2)/10;
}
if(k2!=0)
str5[max2]=1;
k1=0;
for(i=0;i=0;i--)
printf("%d",str6[i]);
printf(".");
for(i=0;i
第二个代码
#include
#include
char a[410],b[410];
int s1[410],s11[410],s2[410],s22[410],s3[410],s33[410];
int main()
{
int len1,len2,i,j,m1,m2,max1,max2,k;
while(scanf("%s%s",a,b)!=EOF)
{
memset(s1,0,sizeof(s1));
memset(s11,0,sizeof(s11));
memset(s2,0,sizeof(s2));
memset(s22,0,sizeof(s22));
m1=len1=strlen(a);
m2=len2=strlen(b);
for(i=0;im2)
max1=m1;
else
max1=m2;
if((len1-m1)>(len2-m2))
max2=len1-m1;
else
max2=len2-m2;
k=0;
for(i=max2-1;i>=0;i--)
{
s33[i]=(s11[i]+s22[i]+k)%10;
k=(s22[i]+s11[i]+k)/10;
}
for(i=0;i=0;i--)
printf("%d",s3[i]);
while(s33[max2-1]==0)
{
if(s33[max2-1]==0)
max2--;
}
if(max2>0)
printf(".");
for(i=0;i