codeforces 373 A - Efim and Strange Grade(算数模拟)

codeforces 373 A - Efim and Strange Grade(算数模拟)

原题:Efim and Strange Grade

题意:给出一个n位的实型数,你可以选择t次在任意位进行四舍五入的进位,求最大结果。

解法:这道题一定不能忽略数位计算时本身带来的进位,如果我们要改变这个数的大小,一定是在最先的那个出现5以上的数字进行四舍五入,之后的t次允许我们多次四舍五入,如果自然进位则不消耗t。

最后一点,整数位的进位也是需要考虑的

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N=2e5+10;
char a[N];
int main()
{
    int n,t;
    while(~scanf("%d%d",&n,&t))
    {
        scanf("%s",a);
        int len=strlen(a),i,j,st,v,flag=0;
        for(i=0; i<len&&a[i]!='.'; i++);
        for(j=i+1; j<len&&a[j]<'5'; j++);
        st=(j==len?0:1);
        t-=1;
        a[j]='\0';
        for(int k=j-1; k>=0; k--)
        {
            if(a[k]=='.'){
                flag=1;continue;
            }
            v=a[k]-'0'+st;
            a[k]=v%10+'0';
            st=v/10;
            if(!st){
               if(!flag&&v>=5&&t>0){
                  t--;
                  st=1;
                  a[k]='\0';
               }else break;
            }
        }
        if(st==1) putchar('1');
        for(j=strlen(a)-1; j>i&&a[j]=='0'; j--);
        if(a[j]!='.') j++;
        a[j]='\0';
        printf("%s",a);
        puts("");
    }
    return 0;
}

转载于:https://www.cnblogs.com/zsyacm666666/p/6694317.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值