历年CSP-J复赛真题解析 | 2011年T1 数字反转

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总贴:历年CSP-J复赛真题解析 | 汇总_热爱编程的通信人的博客-CSDN博客


【题目来源】

洛谷:P1307 [NOIP 2011 普及组] 数字反转 - 洛谷 (luogu.com.cn)

【题目描述】

给定一个整数 N N N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。

【输入】

一个整数 N N N

【输出】

一个整数,表示反转后的新数。

【输入样例】

123

【输出样例】

321

【算法标签】

《洛谷 P1307 数字反转》 #模拟# #字符串# #NOIP普及组# #2011#

【代码详解】

#include   // 包含标准库头文件
using namespace std;

int main()
{
    int n, s = 0, t;  // n:输入整数, s:反转后的数, t:临时存储数字
    bool mark = false;  // 标记是否为负数
  
    // 输入整数n
    cin >> n;
  
    // 处理负数情况
    if (n < 0) {
        mark = true;    // 设置负数标记
        n = -1 * n;     // 转为正数处理
    }
  
    // 数字反转过程
    while (n != 0) {
        t = n % 10;     // 获取最后一位数字
        n /= 10;        // 去掉最后一位
        s = s * 10 + t; // 将数字添加到反转结果中
    }
  
    // 如果是负数,恢复负号
    if (mark) {
        s = -1 * s;
    }
  
    // 输出反转后的数字
    cout << s;
  
    return 0;
}

【运行结果】

-380
-83

你可能感兴趣的:(c++)