A+B Problem IV
时间限制:1000 ms | 内存限制:65535 KB
描述
acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了。
-
输入
- 包含多组测试数据
-
每组数据包含两个正数A,B(可能为小数且位数不大于400)
输出
- 每组输出数据占一行,输出A+B的结果,结果需要是最简的形式。 样例输入
-
1.9 0.1 0.1 0.9 1.23 2.1 3 4.0
样例输出
-
2 1 3.33 7
高精度题,比较麻烦,我是把整数部分和小数部分分开相加的,先把小数相加,因为小数到最后可能会进位,不过提交过多次,一直Wa,原来是计算整数部分的时候,第一位的进位写错了。
#include<stdio.h>
#include<string.h>
char str1[401],str2[401];
int a[401],b[401];
void Fun(char str[])
{
int len = strlen(str);
int ll = len;
for(int i = 0;i<len;i++)
if(str[i] == '.') ll = i;
int k = 0;
for(int i = ll-1;i>=0;i--)
a[k++] += (str[i]-'0');
k = 0;
for(int i = ll+1;i<len;i++)
b[k++] += (str[i]-'0');
}
void output()
{
int x1 = 0,x2 = 0;
int k = 0,f2 = 1;
for(int i = 400;i>=0;i--)
{
b[i] += k;
k = b[i]/10;
b[i] %= 10;
if(b[i] != 0 && f2)
{
x2 = i;
f2 = 0;
}
}
for(int i = 0;i<=400;i++)
{
a[i] += k;
k = a[i]/10;
a[i] %= 10;
if(a[i] != 0) x1 = i;
}
for(int i =x1; i >= 0;i--)
printf("%d",a[i]);
if(!f2)
{
printf(".");
for(int i = 0;i <= x2;i++)
printf("%d",b[i]);
}
printf("\n");
}
int main()
{
while(~scanf("%s%s",str1,str2))
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
Fun(str1);
Fun(str2);
output();
}
return 0;
}