• LETTers比赛第三场 1003 大明A+B解题报告


    报告人:侯建鹏

    报告日期:2012/4/16

    1003 大明A+B

    解题思路:模拟

    我的方法很简单,就是不停的模拟、模拟、再模拟。

    首先,把每个数都分成两部分,整数部分和小数部分,即a_h_count、a_l_count、b_h_count、b_l_count。相信只要细心一些都可以做出来的。

    然后,把模拟人工计算过程,先加小数位,加完之后,产生的对整数位的进位再和两个数的整数部分相加,最后把零去掉,输出就可以了。

    关键是:一定要细心!!!

    详见代码。

     

    #include<stdio.h>
    #include<string.h>
    #define N 400+10
    
    char a[N],b[N];
    int a_h[N],a_l[N],b_h[N],b_l[N],h[N],l[N],h_count,l_count;
    
    int Judge(char *a)
    {
        int i=0;
        while(a[i]!='.'&&a[i]!=0)
            i++;
        return i;
    }
    
    int Change1(char *a,int *a_h,int a_point)
    {
        int i,j=0;
        for(i=a_point-1;i>=0;i--)
        {
            a_h[j]=a[i]-'0';
            j++;
        }
        return j;
    }
    int Change2(char *a,int *a_l,int a_point )
    {
        int i,j=0;
        if(a[a_point]==0)
            return 0;
        for(i=a_point+1;a[i]!=0;i++)
        {
            a_l[j]=a[i]-'0';
            j++;
        }
        return j;
    }
    
    int max(int a,int b)
    {
        return a>b?a:b;
    }
    
    int main()
    {
        int i;
        int a_point,b_point,a_h_count,b_h_count, a_l_count,b_l_count;
        while(scanf("%s%s",a,b)==2)
        {
            memset(a_h,0,sizeof(a_h));
            memset(b_h,0,sizeof(b_h));
            memset(a_l,0,sizeof(a_l));
            memset(b_l,0,sizeof(b_l));
            memset(h,0,sizeof(h));
            memset(l,0,sizeof(l));
            a_point=Judge(a);
            b_point=Judge(b);
            a_h_count=Change1(a,a_h,a_point);
            b_h_count=Change1(b,b_h,b_point);
            a_l_count=Change2(a,a_l,a_point);
            b_l_count=Change2(b,b_l,b_point);
            h_count=max(a_h_count,b_h_count);
            l_count=max(a_l_count,b_l_count);
            //printf("%d\n",a_l_count);
            //printf("%d\n",b_l_count);
            //printf("%d\n",l_count);
            for(i=l_count-1;i>=0;i--)
            {
                if(i==0)
                {
                    l[i]+=a_l[i]+b_l[i];
                    h[0]+=l[i]/10;
                    l[i]=l[i]%10;
                }
                else
                {
                    l[i]+=a_l[i]+b_l[i];
                    l[i-1]+=l[i]/10;
                    l[i]=l[i]%10;
                }
            }
            for(i=0;i<h_count;i++)
            {
                h[i]+=a_h[i]+b_h[i];
                h[i+1]+=h[i]/10;
                h[i]=h[i]%10;
            }
            if(h[h_count]!=0)
                h_count++;
            i=l_count-1;
            while(l[i]==0&&i>=0)
            {
                l_count--;
                i--;
            }
            i=h_count-1;
            while(h[i]==0&&i>=1)
            {
                h_count--;
                i--;
            }
            for(i=h_count-1;i>=0;i--)
                printf("%d",h[i]);
            if(l_count>0)
            {
                printf(".");
                for(i=0;i<l_count;i++)
                    printf("%d",l[i]);
            }
            printf("\n");
            //printf("l_count=%d\n",l_count);
        }
        return 0;
    }
  • 相关阅读:
    BZOJ3270: 博物馆【概率DP】【高斯消元】
    SpringCloud入门概述
    微服务的技术栈
    Markdown基础教程
    分布式架构和垂直架构
    ZooKeeper和CAP理论及一致性原则
    zookeer集群的特性
    java操作zookeeper
    Zookeeper命令使用
    Zookeeper的安装
  • 原文地址:https://www.cnblogs.com/LETTers/p/2452704.html
Copyright © 2020-2023  润新知