【GESP】C++三级练习 luogu-P1307, [NOIP2011 普及组] 数字反转
GESP三级一维数组练习,个人认为是练习到目前相对比较难的一道尤其对小孩子来说,值得练习,难度★✮☆☆☆。
luogu-P1307
题目要求
题目描述
给定一个整数 $N$,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式
一个整数 $N$。
输出格式
一个整数,表示反转后的新数。
样例输入 #1
1
123
样例输出 #1
1
321
样例输入 #2
1
-380
样例输出 #2
1
-83
数据范围
$-1,000,000,000\leq N\leq 1,000,000,000$。
题目分析
- 取数字的每一位
- 使用取模运算(%)可以获取最后一位数字
- 使用整除运算(/)可以去掉最后一位数字
- 循环这个过程直到所有位数都处理完
- 存储和重组数字
- 使用数组存储取出的每一位数字
- 记录数组中数字的个数
- 按照数据倒叙依次乘以1,10,100…然后相加重组数字
- 输出数字
- 输出结果
通过这种方法,我们可以有效地处理各种情况,包括正数、负数和带前导零的数字。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
using namespace std;
int main() {
// 定义变量a用于存储输入的整数
int a;
cin >> a;
// 定义数组用于存储每一位数字
int* array = new int[10];
// index记录数组中数字的个数
int index = 0;
// tmp用于存储最终结果
int tmp = 0;
// 处理输入为0的特殊情况
if (a == 0) {
cout << 0;
return 0;
}
// 循环取出每一位数字存入数组
while (a != 0) {
// 取出最后一位数字
int ans = a % 10;
array[index] = ans;
// 去掉最后一位数字
a /= 10;
if (a == 0) {
break;
} else {
index++;
}
}
// y用于计算每一位的权重(1,10,100...)
int y = 1;
// 从数组末尾开始,重新组合数字
for (int i = index; i >= 0; i--) {
tmp += array[i] * y;
y *= 10;
}
// 输出结果
cout << tmp;
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
本文由作者按照 CC BY 4.0 进行授权