nyoj A+BProblemIV

来源:互联网 发布:温长卿 知乎 编辑:程序博客网 时间:2024/06/05 14:35

A+BProblemIV

题目描述

acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了。

输入

包含多组测试数据
每组数据包含两个正数A,B(可能为小数且位数不大于400)

输出

每组输出数据占一行,输出A+B的结果,结果需要是最简的形式。

样例输入

1.9 0.10.1 0.91.23 2.13 4.0

样例输出

213.337
代码示例:
#include<stdio.h>#include<string.h>char a[1000],b[1000],c[1000];int main(){    while(~scanf("%s%s",a,b))    {        int i,j,signa,signb,la,lb;        memset(c,0x00,sizeof(c));        la=strlen(a);        lb=strlen(b);        for(i=0; i<la; i++)        {            if(a[i]=='.')//找出小数点的位置            {                signa=i;                break;            }        }        if(i==la)        {            signa=la;//如果是整数,就把它变为小数,且要把此时的小数点位置找出            a[la]='.';            a[la+1]='0';            la=la+2;        }        for(j=0; j<lb; j++)        {            if(b[j]=='.')            {                signb=j;                break;            }        }        if(j==lb)        {            signb=lb;            b[lb]='.';            b[lb+1]='0';            lb=lb+2;        }        int d=0,sum,ans=0;        int k=la-signa;//有多少小数位        int t=lb-signb;//有多少小数位        i=la-1;        j=lb-1;        if(k>t)        {            int N=k-t;            while(N--)            {                c[ans++]=a[i--];            }            while(a[i]!='.')            {                sum=a[i]-'0'+b[j]-'0'+d;                d=sum/10;                c[ans]=sum%10+'0';                i--;                j--;                ans++;            }        }        else        {            int N=t-k;            while(N--)            {                c[ans++]=b[j--];            }            while(b[j]!='.')            {                sum=a[i]-'0'+b[j]-'0'+d;                d=sum/10;                c[ans]=sum%10+'0';                i--;                j--;                ans++;            }        }        c[ans]='.';        ans++;        i=signa-1;        j=signb-1;        if(signa>signb)        {            while(j>=0)            {                sum=a[i]-'0'+b[j]-'0'+d;                d=sum/10;                c[ans]=sum%10+'0';                i--;                j--;                ans++;            }            while(i>=0)            {                sum=a[i]-'0'+d;                d=sum/10;                c[ans]=sum%10+'0';                i--;                ans++;            }        }        else        {            while(i>=0)            {                sum=a[i]-'0'+b[j]-'0'+d;                d=sum/10;                c[ans]=sum%10+'0';                i--;                j--;                ans++;            }            while(j>=0)            {                sum=b[j]-'0'+d;                d=sum/10;                c[ans]=sum%10+'0';                j--;                ans++;            }        }        if(d==1)            printf("1");        for(i=ans-1; i>=0; i--)        {            if(c[i]=='.')                break;            else                printf("%c",c[i]);        }        for(j=0; j<i; j++)        {            if(c[j]!='0')//切记是字符型0                break;        }        if(j!=i)        {            for(k=i; k>=j; k--)                printf("%c",c[k]);        }        printf("\n");    }    return 0;}


1 0
原创粉丝点击