小数相加

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<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
int main()
{
    int i,n,m1,m2,m;
    char a[400] = {'0'};
    char b[400] = {'0'};
    char c[400] = {'0'};
    char d[400] = {'0'};
    while(1)
    {
        strcpy(c,d);
        i=1,n=1,m1=0,m2=0;
        while(1)
        {
            a[i]=getchar();
            if(a[i]==' ')
            {
                break;
            }
            if(a[i]=='.')
            {
                m1=i;
            }
            a[i]=a[i]-'0';
            i++;
        }
        if(m1==0)
        {
            m1=i;
        }
        while(1)
        {
            b[n]=getchar();
            if(b[n]==' '||b[n]=='\n')
            {
                break;
            }
            if(b[n]=='.')
            {
                m2=n;
            }
            b[n]=b[n]-'0';
            n++;
        }
        if(m2==0)
        {
            m2=n;
        }
        m=i=(((m1>m2)?m1:m2)+((i-m1)>(n-m2)?(i-m1):(n-m2)));
        if(m1<i||m2<n)
        {
            for(i-=1; i>m1&&i>m2; i--)
            {
                c[i]=(c[i]+a[i]+b[i])%10;
                c[i-1]=(c[i]+a[i]+b[i])/10;
            }
            c[i]='.'-'0';
        }
        m1-=1,m2-=1;
        for(i-=1; m1>=1||m2>=1; i--)
        {
            if(m1>=1&&m2>=1)
            {
                c[i]=(c[i]+a[m1]+b[m2])%10;
                c[i-1]=(a[m1]+b[m2])/10;
                m1--,m2--;
            }
            else
            {
                if(m1>=1&&m2<1)
                {
                    c[i]=(c[i]+a[m1])%10;
                    c[i-1]=(c[i]+a[m1])/10;
                    m1--;
                }
                else
                {
                    c[i]=(c[i]+a[m2])%10;
                    c[i-1]=(c[i]+a[m2])/10;
                    m2--;
                }
            }
        }
        if(c[0]==0)
        {
            for(n=1; n<=m-1; n++)
            {
                cout<<(char)(c[n]+'0');
            }
        }
        else
        {
            for(n=0; n<=m-1; n++)
            {
                cout<<(char)(c[n]+'0');
            }
        }
        cout<<endl;
    }
    return 0;
}



小数相加_第1张图片

你可能感兴趣的:(strcpy)