zoukankan      html  css  js  c++  java
  • 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]=='')
                    break;
                a1[la1++]=a[i];
            }
            a1[la1]='';
            nizhi1();
    
            for(i=i+1;i<la;i++)
            {
                a2[la2++]=a[i];
            }
            a2[la2]='';
            nizhi2();
            for(i=0;i<lb;i++)
            {
                if(b[i]=='.'||b[i]=='')
                    break;
                b1[lb1++]=b[i];
            }
            b1[lb1]='';
            nizhi3();
            for(i=i+1;i<lb;i++)
            {
                b2[lb2++]=b[i];
            }
            b2[lb2]='';
            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]='';
    
            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]='';
            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("
    ");
        }
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    Codeforces 552E Vanya and Brackets(枚举 + 表达式计算)
    matlab 文件打开设置
    boot and loader
    centos6安装bochs
    Python list, dict, set, tuple
    Python 字符串
    Visual Studio 使用
    汇编语言版本的HelloWorld
    用汇编实现add函数
    使用nasm和clang
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3665232.html
Copyright © 2011-2022 走看看