大明A+B
Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
Input
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见
Sample Input
1.1 2.9
1.1111111111 2.3444323343
1 1.1
Sample Output
4
3.4555434454
2.1
题意描述
求和
解题思路:
把整数部分和小数部分分别存在数组中,分别求和。
程序代码:
#include<stdio.h>
#include<string.h>
int Max(int a,int b);
int main()
{
char str1[410],str2[410];
int max1[410],min1[410],max2[410],min2[410];
int i,l1,l2,p,q,m,n;
while(scanf("%s%s",str1,str2)!=EOF)
{
memset(max1,0,sizeof(max1));
memset(max2,0,sizeof(max2));
memset(min1,0,sizeof(min1));
memset(min2,0,sizeof(min2));
l1=strlen(str1);
l2=strlen(str2);
p=0;
q=0;
for(i=0;str1[i]!='\0';i++)
{
if(str1[i]=='.')
break;
else
p++;
}
for(i=0;i<p;i++)
max1[i]=str1[p-1-i]-'0';
for(i=0;i<l1-1-p;i++)
min1[i]=str1[p+1+i]-'0';
for(i=0;str2[i]!='\0';i++)
{
if(str2[i]=='.')
break;
else
q++;
}
for(i=0;i<q;i++)
max2[i]=str2[q-1-i]-'0';
for(i=0;i<l2-1-q;i++)
min2[i]=str2[q+1+i]-'0';
m=Max((l1-p-1),(l2-q-1));
for(i=m-1;i>0;i--)
{
min1[i]+=min2[i];
if(min1[i]>9)
{
min1[i]%=10;
min1[i-1]++;
}
}
min1[0]+=min2[0];
if(min1[0]>9)
{
min1[0]%=10;
max1[0]++;
}
n=Max(p,q);
for(i=0;i<n;i++)
{
max1[i]+=max2[i];
if(max1[i]>9)
{
max1[i]%=10;
max1[i+1]++;
}
}
if(max1[n]>0)
for(i=n;i>=0;i--)
printf("%d",max1[i]);
else
for(i=n-1;i>=0;i--)
printf("%d",max1[i]);
while(1)
{
if(min1[m-1]==0)
m--;
else
break;
}
if(m>0)
printf(".");
for(i=0;i<m;i++)
printf("%d",min1[i]);
printf("\n");
}
return 0;
}
int Max(int a,int b)
{
if(a>b)
return a;
else
return b;
}