美文网首页
上交OJ-1007. 二哥领工资

上交OJ-1007. 二哥领工资

作者: code猪 | 来源:发表于2018-05-11 13:35 被阅读30次

    1007. 二哥领工资


    题目描述

    二哥当了多年的助教,今天终于要发工资了!二哥正在高兴之际,得知工资是分两部分发放的。第一部分是这学期的工资,另一部分是之前所有学期的工资总和。而领取工资时,出纳员会问二哥,两部分工资加在一起是多少,如果二哥回答错了,就只能领到这个学期的工资之前所有学期的劳动就白费了。

    二哥从小道消息得知,出纳员是个对数字敏感的人,不能有一点差错,所以二哥需要一个程序来帮他算出精确的工资总和。

    输入格式

    输入共两行,每行是一个十进制表示的工资金额(没有正负号,小数点后有两位数字)。

    输出格式

    输出共一行,即精确的工资总和(没有正负号,小数点后有两位数字)。

    说明

    工资金额的有效数字位数不超过200位,并保证有小数点。

    Sample Input

    123.45
    543.21
    

    Sample Output

    666.66
    

    分析

    200位输入,不能使用double,只是用字符串来进行大数相加。

    #include <stdio.h>
    
    int main()
    {
        char a[210], b[210];
        int len_a, len_b;
        char sum[210];
        char tmp;
        int len_sum;
        int i, j;
        char flag=0;
        
        for(len_a=0; (a[len_a]=getchar())!='\n';) {
            if(a[len_a]!='.')
                len_a++;
        }
        for(len_b=0; (b[len_b]=getchar())!='\n';) {
            if(b[len_b]!='.')
                len_b++;
        }
        len_sum=0;
        if(len_a<len_b)
        {
            for(i=len_a-1, j=len_b-1; i>=0; i--, j--) {
                tmp=a[i]+b[j]+flag-'0';
                if(tmp>'9') {
                    flag=1;
                    sum[len_sum]=tmp-10;
                }
                else {
                    sum[len_sum]=tmp;
                    flag=0;
                }
                len_sum++;
            }
            for(; j>=0; j--) {
                tmp=b[j]+flag;
                if(tmp>'9') {
                    flag=1;
                    sum[len_sum]=tmp-10;
                }
                else {
                    sum[len_sum]=tmp;
                    flag=0;
                }
                len_sum++;
            }
            if(flag) {
                sum[len_sum]='1';
                len_sum++;
            }
        }
        else
        {
            for(i=len_b-1, j=len_a-1; i>=0; i--, j--) {
                tmp=b[i]+a[j]+flag-'0';
                if(tmp>'9') {
                    flag=1;
                    sum[len_sum]=tmp-10;
                }
                else {
                    sum[len_sum]=tmp;
                    flag=0;
                }
                len_sum++;
            }
            for(; j>=0; j--) {
                tmp=a[j]+flag;
                if(tmp>'9') {
                    flag=1;
                    sum[len_sum]=tmp-10;
                }
                else {
                    sum[len_sum]=tmp;
                    flag=0;
                }
                len_sum++;
            }
            if(flag) {
                sum[len_sum]='1';
                len_sum++;
            }
        }
        
        for(i=len_sum-1; i>=0; i--) {
            if(i==1)
                putchar('.');
            putchar(sum[i]);
        }
        
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:上交OJ-1007. 二哥领工资

          本文链接:https://www.haomeiwen.com/subject/ahsfdftx.html