P1307 [NOIP 2011 普及组] 数字反转 (洛谷)
592 字
3 分钟
P1307 [NOIP 2011 普及组] 数字反转 (洛谷)
题目描述
给定一个整数 ,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式
一个整数 。
输出格式
一个整数,表示反转后的新数。
输入输出样例 #1
输入 #1
123输出 #1
321输入输出样例 #2
输入 #2
-380输出 #2
-83说明/提示
【数据范围】
。
noip2011 普及组第一题
题解与分析
解题突破口
反转数字最核心的处理在于去除前导(反转后的)零以及保留负号。
**数学计算法:**在 C++ 中,直接利用整数的 / 10 和 % 10 操作可以非常优雅地从低位向高位提取数字。当我们在新变量 res 中通过 res = res * 10 + n % 10 进行反转累加时,原数末尾的 0 会被计算为 res * 10 + 0,由于初始 res 为 0,前置的 0 也就自然消失了。此外,C++ 的 % 对负数运算会保留负号(例如 -123 % 10 = -3),因此负数问题也迎刃而解!
复杂度分析
- 时间复杂度: ,循环次数仅与数字的位数相关,最大 10 位数只需循环 10 次。
- 空间复杂度: ,仅需常数级的额外变量存储反转后的数值。
代码实现
C++ 版本 (数学位运算法)
#include <iostream>using namespace std;
int main() { int n; cin >> n;
int res = 0; while (n != 0) { res = res * 10 + n % 10; // 提取最后一位并累加到反转结果中 n /= 10; // 削去最后一位 }
cout << res << endl; return 0;}Python 版本 (字符串切片法)
对于 Python,更“Pythonic”的做法是直接将数字视作字符串处理。利用切片反转字符串后,使用内置的 int() 转换,系统会自动帮你吃掉多余的前导零,省去了大量的繁琐判断。
n_str = input().strip()
if n_str == '0': print(0)elif n_str[0] == '-': # 如果是负数,提取除负号外的所有字符,反转后转成 int 消除前置0,再补充负号 print('-' + str(int(n_str[1:][::-1])))else: # 正数直接反转,转为 int 消除前置0后输出 print(int(n_str[::-1])) 相关文章 智能推荐
1
P1089 [NOIP 2004 提高组] 津津的储蓄计划 (洛谷)
算法笔记 洛谷 P1089 [NOIP 2004 提高组] 津津的储蓄计划的题解与代码实现。
2
P1428 小鱼比可爱 (洛谷)
算法笔记 洛谷 P1428 小鱼比可爱的题解与代码实现。
3
绵阳城市学院教务处密码加密算法分析
算法笔记 绵阳城市学院教务处登录密码加密算法分析。
4
绵阳城市学院校园网 Srun Portal 认证逆向分析
算法笔记 通过浏览器抓包与前端 JavaScript 分析,使用 Go 语言完整还原 Srun Portal 校园网认证流程,包括 HMAC-MD5、XXTEA、自定义 Base64 等加密算法的逐步分析。
5
绵阳城市学院某老师DeepAI查重系统v6.0分析
逆向工程 对绵阳城市学院某老师提供的 DeepAI 查重系统 v6.0 进行逆向分析,还原 PyInstaller 打包的 Python 源码,揭示其核心查重算法本质。
随机文章 随机推荐