1 条题解

  • 0
    @ 2026-10-18 21:32:02

    [NOIP 2011 普及组] 数字反转

    知识点

    整数运算、数位处理

    解题思路

    取绝对值后反复取末位并加入反转结果,最后恢复原数符号。前导零自然被整数运算去掉。

    正确性说明

    每轮将尚未处理的最低位追加到答案右侧,处理完后各位顺序恰好反转;符号独立保存,不参与数位操作。

    易错点

    输入为0时输出0;负号仍在最前面;用long long避免反转中间值或取绝对值越界。

    复杂度

    时间O(log(|n|+1)),空间O(1)。

    参考代码(GNU C++17)

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        long long n;cin>>n;bool neg=n<0;if(neg)n=-n;
        long long ans=0;while(n){ans=ans*10+n%10;n/=10;}
        cout<<(neg?-ans:ans)<<'\n';
    }
    
    • 1

    信息

    ID
    68
    时间
    1000ms
    内存
    256MiB
    难度
    进阶
    标签
    递交数
    1
    已通过
    1
    上传者