[NOIP2011 普及组] 数字反转
GESP三级一维数组练习,个人认为是练习到目前相对比较难的一道尤其对小孩子来说,值得练习,难度★✮☆☆☆。
luogu-P1307
题目要求
题目描述
给定一个整数 ,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式
一个整数 。
输出格式
一个整数,表示反转后的新数。
样例输入 #1
123
样例输出 #1
321
样例输入 #2
-380
样例输出 #2
-83
数据范围
。
题目分析
取数字的每一位
- 使用取模运算(%)可以获取最后一位数字
- 使用整除运算(/)可以去掉最后一位数字
- 循环这个过程直到所有位数都处理完
存储和重组数字
- 使用数组存储取出的每一位数字
- 记录数组中数字的个数
- 按照数据倒叙依次乘以1,10,100…然后相加重组数字
输出数字
- 输出结果
通过这种方法,我们可以有效地处理各种情况,包括正数、负数和带前导零的数字。
{% include custom/custom-post-content-inner.html %}
示例代码
#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;
}
{% include custom/custom-post-content-footer.md %}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on