首页 > 其他 > 详细

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

时间:2014-04-15 21:28:32      阅读:603      评论:0      收藏:0      [点我收藏+]

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

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

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

 

题目链接

 

 

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

bubuko.com,布布扣
#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

 

HDU 1753 大明A+B(字符串模拟,简单题),布布扣,bubuko.com

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

原文:http://www.cnblogs.com/laiba2004/p/3665232.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!