zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/LETTers/p/2452704.html
Copyright © 2011-2022 走看看