《信息学奥赛一本通(C++版)》1089:数字反转

本文介绍了一种实现整数位数翻转的算法,包括处理负数和避免前导零的情况。通过示例代码展示了如何使用while循环逐位读取并翻转整数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:《信息学奥赛一本通(C++版)》
测评地址:信息学奥赛一本通在线测评

【题目描述】
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零,例如输入−380−380,反转后得到的新数为−83−83。

【输入】
输入共 1 行,一个整数N。
−1,000,000,000≤N≤1,000,000,000。

【输出】
输出共 1 行,一个整数,表示反转后的新数。

【输入样例】
123

【输出样例】
321

【提示】【输入输出样例 2】
输入:
-380

输出:
-83

代码如下:

注:代码仅供参考,不只有一种解法。

//while循环
#include<iostream>
using namespace std;
int main(){
 int n,right_digit;
 cin>>n;
 while(n!=0){if(n<0){cout<<"-";n=-n;}if(n>0){if(n%10==0) {cout<<"";n=n/10;}}right_digit=n%10;if(n%10!=0) {cout<<right_digit;n=n/10;}}
 return 0;
}
### 关于信息学奥赛一本 C++ 题目1144 的解法 题目描述常涉及字符串处理,具体到本题可能要求实现某种特定的字符串操作逻辑。以下是基于常见需求的一种解决方案。 #### 方法一:过分割字符串并反转单词 此方法的核心在于先将输入字符串按空格分隔成多个子串存储至数组中,随后逐一反转这些子串再输出[^1]。 ```cpp #include <bits/stdc++.h> using namespace std; int main() { string s, w[500]; int wi = 0, b = 0; getline(cin, s); for (int i = 0; i <= s.length(); ++i) { if (s[i] == ' ' || s[i] == '\0') { w[wi++] = s.substr(b, i - b); // 截取从位置b开始长度为(i-b)的部分作为新词存入w[] b = i + 1; } } for (int i = 0; i < wi; ++i) { reverse(w[i].begin(), w[i].end()); // 对每个单独提取出来的单词执行翻转操作 cout << w[i] << ' '; } return 0; } ``` 这种方法的优点是清晰易懂,适合初学者理解如何分解复杂任务为更简单的步骤来完成目标功能[^1]。 #### 方法二:直接逆序打印当前读取部分 另一种更为紧凑的方式是在遇到每一个新的空白符之前立即回溯已扫描过的字符序列进行即时显示。 ```cpp #include <bits/stdc++..h> using namespace std; int main(){ char s[505]; cin.getline(s, 505); int b = 0, len = strlen(s); for(int i = 0;i<=len;++i){ if(s[i]==' '||s[i]=='\0'){ for(int j=i-1;j>=b;j--){ cout<<s[j]; // 反向逐字输出构成该段话的最后一组连续字母即单个词语 } cout<<' '; // 单独处理好每两个相邻词汇间应有的间隔标记——空格 b = i+1; } } return 0; } ``` 这种方式减少了中间数据结构使用的必要性,从而提高了程序运行效率,在性能敏感场景下具有优势[^1]。 以上两种算法均能有效解决类似问题情境下的挑战,实际应用时可根据具体情况选择合适的方法实施编码工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RainSky_

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值