C++编写整数反转代码预期输出'321'却得到6,存在什么问题?
问题分析
- 逻辑错误:用整数加法代替了数字拼接
代码中cout << num3 + num2 + num1 << endl;执行的是算术加法运算,123拆分得到的num1=1、num2=2、num3=3,相加结果自然为6,和你预期的数字顺序拼接效果完全不符。 - 无效代码:
static_cast<char>(num1, num2, num3)无任何实际作用
一是逗号运算符在这里会忽略前两个参数,仅对最后一个参数num3做类型转换,且你没有将转换后的结果赋值给任何变量,这行代码不会影响后续任何逻辑;二是就算要把数字转为可显示的字符,也需要给数字加上ASCII码中'0'的偏移量,直接把整数1转char得到的是不可见的控制字符,不是可显示的'1'。
修复方案
适配三位数场景的快速修改
方式1:直接按顺序输出三个数字,不做加法
cout << num3 << num2 << num1 << endl;
方式2:计算得到反转后的整数再输出
int reverse_num = num3 * 100 + num2 * 10 + num1; cout << reverse_num << endl;
任意位数整数反转的通用实现
如果需要适配任意长度的正整数反转,不要硬编码按位拆分,可以用循环取余的写法:
int number = 123; int reverse_num = 0; while(number > 0) { reverse_num = reverse_num * 10 + number % 10; number = number / 10; } cout << reverse_num << endl;
内容的提问来源于stack exchange,提问作者Corin-2
相关产品推荐
相关产品推荐

