大数相加(代码错误,求改正)

来源:互联网 发布:长春盘古网络咋样 编辑:程序博客网 时间:2024/05/18 13:27

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

2、题目:

大明A+B

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5959    Accepted Submission(s): 2045


Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。

现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
 

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

Output
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
 

Sample Input
1.1 2.91.1111111111 2.34443233431 1.1
 

Sample Output
43.45554344542.1
 

Author
linle
 

Source
2007省赛集训队练习赛(6)_linle专场
3、代码:(wrong)

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char a[1000];char b[1000];char c[1000];int main(){    while(scanf("%s%s",a,b)!=EOF)    {        int la=strlen(a);        int lb=strlen(b);        int flag1=0,flag2=0;        for(int i=0; i<la; i++)        {            if((a[i]!='0')&&(a[i]!='.'))                flag1=1;        }        for(int i=0; i<lb; i++)        {            if((b[i]!='0')&&(b[i]!='.'))                flag2=1;        }        if(0==flag1&&0==flag2)            printf("0\n");        else        {            int posa=la;            int posb=lb;            for(int i=0; i<la; i++)            {                if(a[i]=='.')                {                    posa=i;                    break;                }            }            for(int i=0; i<lb; i++)            {                if(b[i]=='.')                {                    posb=i;                    break;                }            }            int maxs=max(posa,posb);            int maxe=max(la-posa,lb-posb);            int l=maxs+maxe;            char tempa[1000];            char tempb[1000];            if(posa<maxs)            {                int pp=maxs-posa;                int ppp=pp;                for(int i=0; i<pp; i++)                    tempa[i]='0';                for(int i=0; i<la; i++)                {                    tempa[pp++]=a[i];                }                for(int i=pp; i<l; i++)                    tempa[i]='0';                tempa[l]='\0';                tempa[posa+ppp]='.';            }            else            {                strcpy(tempa,a);                for(int i=la; i<l; i++)                    tempa[i]='0';                tempa[l]='\0';                tempa[posa]='.';            }            if(posb<maxs)            {                int pp=maxs-posb;                int ppp=pp;                //printf("&&&%d %d %d\n",maxs,posb,pp);                for(int i=0; i<pp; i++)                    tempb[i]='0';                for(int i=0; i<lb; i++)                {                    tempb[pp++]=b[i];                }                for(int i=pp; i<l; i++)                    tempb[i]='0';                tempb[l]='\0';                tempb[posb+ppp]='.';                //printf("**%d %d %d %d %s\n",maxs,posa,posb,pp,tempb);            }            else            {                strcpy(tempb,b);                for(int i=lb; i<l; i++)                    tempb[i]='0';                tempb[l]='\0';                tempb[posb]='.';            }            //printf("%s\n%s\n",tempa,tempb);            //printf("%d %c\n",strlen(tempa),tempa[l-1]);            int temp=0;            for(int i=l-1; i>=0; i--)            {                if(tempa[i]!='.')                {                    int ans=(tempa[i]-'0')+(tempb[i]-'0')+temp;                    if(ans>9)                    {                        c[i]=ans-10+'0';                        temp=1;                    }                    else                    {                        c[i]=ans+'0';                        temp=0;                    }                }                else                    c[i]='.';            }            c[l]='\0';            for(int i=l-1; i>=0; i--)            {                if((c[i]!='0'))                {                    if(c[i]=='.')                    {                        c[i]=0;c[i+1]='\0';                        break;                    }                    break;                }            }//printf("**%s\n",c);            int tmp=0;            for(int i=0;i<l;i++)            {                if((c[i]!='0'))                {                    tmp=i;                    break;                }            }            if(1==temp)            {                printf("1%s\n", c);            }            else if(c[tmp]=='.')//tmp>=2)            {                printf("0%s\n", c+tmp);//if((c[tmp-1]=='.')&&(c[tmp-2]=='0'))                //tmp-=2;            }            //if(temp==1)              //  printf("1%s\n",c+tmp);            //else              //  printf("%s\n",c+tmp);            else                printf("%s\n", c+tmp);        }    }    return 0;}/*1.1 2.91.1111111111 2.34443233431 1.11.234512.45*//*0 01.2333 1.266799999 112121213213124342545354545 13312312321312321321.02300000000000000000000000000*//*00.1 1*/




原创粉丝点击