Codeforces Round 891 (Div. 3)----->B. Maximum Rounding

文章介绍了如何使用C++编程语言实现一个算法,解决四舍五入到最大整数的问题,通过遍历字符串并处理进位来得到正确的结果。
摘要由CSDN通过智能技术生成

一,思路:

因为题目要求四舍五入后,结果要最大,那么我们直接从左到右遍历找到第一个比 5大的数字,当然如果这个数字前面是4的话那么我们应该接着往前面找到第一个小于 4元素将他 +1,并用 idx标记,那么输出的时候,比 idx小的照常输出,比idx大的全部输出 0。

二,

#include <iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;


void Solved(){

   string str;
   cin>>str;

//因为从左到右的第一位也有可能会进位,所以要预留一个位置
   str='0'+str;

//找到第一个大于等于5的元素,并标记
   int idx=-1;
   for(int i=1;i<str.size();i++){
       if(str[i]>='5'){
           idx=i;
           break;
       }
   }


//当所有元素都小于 5时,就照常输出
   if(idx==-1){
       for(int i=1;i<str.size();i++) cout<<str[i];
       cout<<endl;
       return;
   }

//否则就要往前面找,到第一个比4小的数 +1,并重新标记
   for(int i=idx;i>=0;i--){
       if(str[i]<='3'){
          str[i]+=1;
          idx=i;
          break;
       }
   }

//不能输出前导零
   if(str[0]!='0') cout<<1;

   for(int i=1;i<str.size();i++){
       if(i>idx) cout<<0;
       else cout<<str[i];
   }

   cout<<endl;

}

int main()
{
    int t;
    cin>>t;
    while(t--) {
        Solved();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值