3 条题解

  • 0
    @ 2025-11-3 17:09:11

    思路: 既然是四舍五入,那当然是越往左越应该入,这样才能使修改后的数更大。 我们可以把整个字符串自右向左扫,只要满足了进位条件,那就进位。并将标记放到这里。 最后输出时,只要在非标记区域,正常输出即可,否则输出 0。

    #include <bits/stdc++.h>
    using namespace std;
    int t;
    string s;
    int main()
    {
        cin >> t;
        while (t--)
        {
            cin >> s;
            s = '0' + s; // 预处理最高位
            int sswr = s.size();
            for (int i = s.size() - 1; i > 0; i--)
            {
                if (s[i] == '9' + 1)
                { // 满十进一
                    s[i] = '0';
                    s[i - 1]++;
                }
                if (s[i] >= '5')
                { // 五入
                    sswr = i;
                    s[i - 1]++;
                }
            }
            for (int i = 0; i < s.size(); i++)
            { // 输出
                if (i == 0 && s[i] == '0')
                    continue;
                if (i < sswr)
                    cout << s[i];
                else
                    cout << '0';
            }
            puts("");
        }
        return 0;
    }
    

    信息

    ID
    1175
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    196
    已通过
    29
    上传者