三级
C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++三级练习 luogu-P1307, [NOIP2011 普及组] 数字反转
📅 2024-12-02·✍️ OneCoder·计算中...·⏱️ 4 分钟
#GESP#C++#一维数组
GESP三级一维数组练习,个人认为是练习到目前相对比较难的一道尤其对小孩子来说,值得练习,难度★✮☆☆☆。
luogu-P1307
题目要求
题目描述
给定一个整数 ,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。
输入格式
一个整数 。
输出格式
一个整数,表示反转后的新数。
样例输入 #1
CONSOLE
1 行
123
样例输出 #1
CONSOLE
1 行
321
样例输入 #2
CONSOLE
1 行
-380
样例输出 #2
CONSOLE
1 行
-83
数据范围
。
题目分析
-
取数字的每一位
- 使用取模运算(%)可以获取最后一位数字
- 使用整除运算(/)可以去掉最后一位数字
- 循环这个过程直到所有位数都处理完
-
存储和重组数字
- 使用数组存储取出的每一位数字
- 记录数组中数字的个数
- 按照数据倒叙依次乘以1,10,100...然后相加重组数字
-
输出数字
- 输出结果
通过这种方法,我们可以有效地处理各种情况,包括正数、负数和带前导零的数字。
示例代码
C++
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;
}
💡 OneCoder 资源指引
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
🤝 技术交流与答疑
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
📚
猜你想读 · 相关文章推荐
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B2064, 斐波那契数列
斐波那契数列本身可能并不一定涉及数组知识点,但本题中要求的输入、输出格式涉及到三级知识点一维数组的使用。 题目本身对小学生来说,也是有一定难度的。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 4 分钟
【GESP】C++三级练习 luogu-B3661, [语言月赛202209] 排排队
三级知识点一维数组练习,除了应用了数组以外,其余逻辑比较简单,适合初学者。
阅读全文 →
GESP 编程与算法 · 三级⏱️ 3 分钟
【GESP】C++三级练习 luogu-B2087, 与指定数字相同的数的个数
GESP三级知识点一维数组练习,题目本身逻辑不复杂。
阅读全文 →
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com
读者讨论与留言
💬 还没有读者留言,快来成为第一个讨论者吧!