CF1857B 题解
思路
这题可以用贪心做,倒着遍历,看这一位上的数字是否 ,如果是的,那就直接四舍五入。
注意事项
- 要倒着遍历;
- 每次处理时不能直接把 清零,而应该记录一个 标记,在输出的时候处理即可;
- 处理时注意进位;
- 注意有时候最高位还能进位,这种情况特殊处理。
代码
# include <bits/stdc++.h> //万能头
using namespace std;
int t, last;
string a;
int main () {
cin >> t;
while (t --) { //多组数据通用写法
cin >> a;
last = a.size (); //多组数据要清空
for (int i = a.size (); -- i;)
if (a[i] > '9') //判断当前是否需要进位
a[i] = '0', ++ a[i - 1];
else if (a[i] > '4') { //判断当前是否可以五入
last = i; //记录下来
++ a[i - 1]; //下一位 +1
}
if (a[0] > '4') { //最高位是否可以五入或需要进位
cout << 1;
for (int i = 0; i < a.size (); ++ i)
cout << 0;
} else {
for (int i = 0; i < last; ++ i)
cout << a[i]; //前面部分正常输出
for (int i = last; i < a.size (); ++ i)
cout << 0; //后面部分全变 0
}
cout << '\n'; //别忘了换行
}
return 0; //结束程序
}

浙公网安备 33010602011771号