自测运行点对比显示一样,但过不了,显示实际输出与预期不一样
//从小数点后开始查找第1位>=5的数,循环执行t次 t=0或找不到就直接return
//五入操作: 找到>=5的数前面第一个不为9的数,将其+1. 后面的数全部记0(丢掉)
//输出时判断是否有尾0
#include<bits/stdc++.h>
#define FOR(i,a,b) for(int i = a; i <= b; i++)
const int maxn = 200005;
using namespace std;
long long n,t,pos;
string xs;
void ru(int start) // start 是第一个>=5的数
{
int plus;
for(plus = start-1; plus >= 0; plus--)
if(xs[plus] != '9') break;
xs[plus] += 1;
FOR(i, start, xs.length()-1)
xs[i] = 0;
}
void deal(int tt)
{
if(tt == 0) return;
int i = pos+1; //小数点查找开始位置
while(xs[i] < '5' && xs[i] >= '0' && i < xs.length()) i++; //找第一个5的数
if(i == xs.length()) return; //没找到>=5的数
ru(i);
deal(tt-1);
}
int main()
{
cin>>n>>t;
cin>>xs;
pos = xs.find('.'); //小数点位置
deal(t);
int i = xs.length()-1;
while(xs[i] == '0')
{
// xs.erase(i);
i--;
}
FOR(j,0,i)
cout<<xs[j];
}
代码见上
点对比一样,就是过不了
这是什么问题啊
