专栏文章
题解:P1307 [NOIP2011 普及组] 数字反转
P1307题解参与者 7已保存评论 10
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @miqkmpfd
- 此快照首次捕获于
- 2025/12/04 06:21 3 个月前
- 此快照最后确认于
- 2025/12/04 06:21 3 个月前
[NOIP2011 普及组] 数字反转 题解
题目大意
给定一个整数 ,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。
解题思路
思路概述:
本题要求将输入的整数进行数字反转,反转后的数字必须满足整数的常见格式,即不能有前导零。
- 如果输入数是负数,反转后依然保留负号。
- 如果输入数是正数,则直接反转数字。
详细步骤:
-
负数判断:
- 如果输入的数字是负数,我们先记录下这个信息(
flag),然后处理绝对值部分。 - 最后,再将负号加回。
- 如果输入的数字是负数,我们先记录下这个信息(
-
字符串处理:
- 将输入的数字转化为字符串
s,然后从字符串的最后一位开始,逐位反转数字。
- 将输入的数字转化为字符串
-
反转数字:
- 通过逐位构造反转后的数,累加到
ans中。
- 通过逐位构造反转后的数,累加到
-
去除前导零:
- 由于我们是从字符串的末尾向前处理,每次遇到一个非零的数字时,会自动去除反转后的前导零。
代码实现:
CPP#include <bits/stdc++.h>
using namespace std;
string s; // 输入的数字字符串
long long ans = 0; // 存储反转后的数字
int flag = 0; // 标记负数
int main() {
cin >> s; // 读取输入
int k = s.length() - 1; // 计算字符串的最后一个字符下标
// 如果是负数,处理负号并标记
if (s[0] == '-') {
flag = 1;
cout << '-'; // 输出负号
}
// 从字符串的最后一位开始,逐位构造反转后的数字
for (int i = k; i >= flag; i--) {
ans *= 10; // 每次将当前结果乘以10,腾出个位
ans += (s[i] - '0'); // 加上当前位的数字
}
cout << ans << '\n'; // 输出反转后的数字
return 0;
}
相关推荐
评论
共 10 条评论,欢迎与作者交流。
正在加载评论...