HDU 1753 大明A+B(字符串模拟,简单题)

简单题,但要考虑一些细节:

前导0不要,后导0不要,小数长度不一样时,有进位时,逆置处理输出

然后处理起来就比较麻烦了。

 

题目链接

 

 

我的代码纯模拟,把小数点前后分开来处理,写的很繁杂,纯当纪念——可怜我的眼睛。

#include<string.h>
#include<stdio.h>
int i,la,lb,la1,lb1,la2,lb2,lc1,lc2,yi,temp;
char a[410],b[410],a1[410],a2[410],b1[410],b2[410],c1[410],c2[410];
void nizhi1(){
    int le=la1/2;
    char c;
    for(int i=0;i<le;i++){
        c=a1[i];a1[i]=a1[la1-1-i];a1[la1-1-i]=c;
    }
}
void nizhi2(){
    int le=la2/2;
    char c;
    for(int i=0;i<le;i++){
        c=a2[i];
        a2[i]=a2[la2-1-i];
        a2[la2-1-i]=c;
    }
}
void nizhi3(){
    int le=lb1/2;
    char c;
    for(int i=0;i<le;i++){
        c=b1[i];
        b1[i]=b1[lb1-1-i];
        b1[lb1-1-i]=c;
    }
}
void nizhi4(){
    int le=lb2/2;
    char c;
    for(int i=0;i<le;i++){
        c=b2[i];
        b2[i]=b2[lb2-1-i];
        b2[lb2-1-i]=c;
    }
}
void nizhi5(){
    int le=lc1/2;
    char c;
    for(int i=0;i<le;i++){
        c=c1[i];
        c1[i]=c1[lc1-1-i];
        c1[lc1-1-i]=c;
    }
}
void nizhi6(){
    int le=lc2/2;
    char c;
    for(int i=0;i<le;i++){
        c=c2[i];
        c2[i]=c2[lc2-1-i];
        c2[lc2-1-i]=c;
    }
}
int main()
{

    while(scanf("%s%s",a,b)!=EOF)
    {
        memset(a1,0,sizeof(a1));
        memset(a2,0,sizeof(a2));
        memset(b1,0,sizeof(b1));
        memset(b2,0,sizeof(b2));
        memset(c1,0,sizeof(c1));
        memset(c2,0,sizeof(c2));
        i=la=lb=la1=lb1=la2=lb2=lc1=lc2=yi=temp=0;
        la=strlen(a);
        lb=strlen(b);
        la1=la2=lb1=lb2=0;
        for(i=0;i<la;i++)
        {
            if(a[i]=='.'||a[i]=='\0')
                break;
            a1[la1++]=a[i];
        }
        a1[la1]='\0';
        nizhi1();

        for(i=i+1;i<la;i++)
        {
            a2[la2++]=a[i];
        }
        a2[la2]='\0';
        nizhi2();
        for(i=0;i<lb;i++)
        {
            if(b[i]=='.'||b[i]=='\0')
                break;
            b1[lb1++]=b[i];
        }
        b1[lb1]='\0';
        nizhi3();
        for(i=i+1;i<lb;i++)
        {
            b2[lb2++]=b[i];
        }
        b2[lb2]='\0';
        nizhi4();

        lc1=0;
        temp=0;
        yi=0;
        if(la2>lb2)
        {
            int cha=la2-lb2;
            for(i=0;i<cha;i++)
            {
                if(yi==0&&a2[i]=='0'){}
                else
                {
                    yi=1;
                    c1[lc1++]=a2[i];
                }
            }
            for(i=0;i<lb2;i++)
            {
                temp=temp+a2[i+cha]+b2[i]-'0'-'0';
                if(temp%10==0&&yi==0){}
                else
                {
                    yi=1;
                    c1[lc1++]=temp%10+'0';
                }
                temp=temp/10;
            }
        }
        else 
        {
            int cha=lb2-la2;
            for(i=0;i<cha;i++)
            {
                if(yi==0&&b2[i]=='0'){}
                else
                {
                    yi=1;
                    c1[lc1++]=b2[i];
                }
            }
            for(i=0;i<la2;i++)
            {
                temp=temp+b2[i+cha]+a2[i]-'0'-'0';
                if(temp%10==0&&yi==0){}
                else
                {
                    yi=1;
                    c1[lc1++]=temp%10+'0';
                }
                temp=temp/10;
            }
        }
        c1[lc1]='\0';

        if(la1>lb1)
        {
            for(i=0;i<lb1;i++)
            {
                temp=temp+a1[i]+b1[i]-'0'-'0';
                c2[lc2++]=temp%10+'0';
                temp=temp/10;
            }
            for(;i<la1;i++)
            {
                temp=temp+a1[i]-'0';
                c2[lc2++]=temp%10+'0';
                temp=temp/10;
            }
        }
        else 
        {
            for(i=0;i<la1;i++)
            {
                temp=temp+a1[i]+b1[i]-'0'-'0';
                c2[lc2++]=temp%10+'0';
                temp=temp/10;
            }
            for(;i<lb1;i++)
            {
                temp=temp+b1[i]-'0';
                c2[lc2++]=temp%10+'0';
                temp=temp/10;
            }
        }
        if(temp!=0)
            c2[lc2++]=temp+'0';
        c2[lc2]='\0';
        nizhi5();
        nizhi6();
        yi=0;
        for(i=0;i<lc2;i++)
        {
            if(c2[i]=='0'&&yi==0)
                continue;
            else 
            {
                yi=1;
                printf("%c",c2[i]);
            }
        }
        if(lc1!=0)
        {
            printf(".%s",c1);
        }
        printf("\n");
    }
    return 0;
}
View Code

 

posted @ 2014-04-14 23:36  laiba2004  Views(150)  Comments(0Edit  收藏  举报