大明A+B

题目来源:

http://acm.hdu.edu.cn/showproblem.php?pid=1753

Problem Description

话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫大明
这时他已经不是那个只会做100以内加法的那个小明了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数AB,你的任务是代表大明计算出A+B的值。

Input

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

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

题意描述

求和

解题思路:

把整数部分和小数部分分别存在数组中,分别求和。

程序代码:

#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;

}

猜你喜欢

转载自blog.csdn.net/hezhiying_/article/details/79505119
A+B