自测运行点对比显示一样,但过不了,显示实际输出与预期不一样
//从小数点后开始查找第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]; }
代码见上
点对比一样,就是过不了
这是什么问题啊