SJTUOJ 1007. 二哥领工资

题目内容

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

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

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

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

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

Sample Input
123.45
543.21
Sample Output
666.66

代码实现

大数加法,固定两位小数,一次循环即可

#include <stdio.h>
#include <string.h>
int main()
{
    char sum[202] = {0};
    char input[201];
    int i,j,f=0;
    scanf("%s",input);
    for(i = strlen(input) - 1, j = 0; i >= 0; i--){
        if('.' != input[i]){
            sum[j++] = input[i] - '0';
        }
    }
    scanf("%s",input);
    for(i = strlen(input) - 1, j = 0; i >= 0; i--){
        if('.' != input[i]){
            sum[j] += input[i] - '0';
            sum[j+1] += sum[j] / 10;
            sum[j] = sum[j] % 10;
            j++;
        }
    }
    for(i = 201; i >= 0;i--){
        if(!f){
            if(0 == sum[i]){
                continue;
            }
            else{
                f=1;
            }
        }
        if(1 == i){
            putchar('.');
        }
        putchar(sum[i]+'0');
    }
    putchar('\n');
    return 0;
}

时间:0ms 空间:8808kb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值