竞赛讨论区 > 自测运行点对比显示一样,但过不了,显示实际输出与预期不一样
头像
bbdzs
发布于 2021-11-08 23:43
+ 关注

自测运行点对比显示一样,但过不了,显示实际输出与预期不一样

//从小数点后开始查找第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];
}
代码见上
点对比一样,就是过不了
这是什么问题啊

全部评论

(1) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐