一,思路:
因为题目要求四舍五入后,结果要最大,那么我们直接从左到右遍历找到第一个比 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;
}