C++使用do while循环实现输入数字输出各位数及总和问题求助
现有代码的问题点
- 变量
sum未初始化就直接累加,属于未定义行为,部分编译器运行时会得到随机的求和结果,需要初始化为0。 - 现有逻辑通过
%10取余得到的是从低位到高位的数字(输入123时依次得到3、2、1),直接输出会是逆序,无法得到要求的正序各位数字。
修改思路
先计算输入数字的最高位对应的除数(比如123对应的除数是100),之后每次用数字除以除数得到当前最高位输出,再将数字对除数取余去掉最高位,除数除以10,直到除数为0,全程可通过要求的while/do while循环实现。
修改后完整代码
#include <iostream> using namespace std; int main() { cout << "Enter a number: "; int input_num, sum = 0; cin >> input_num; cout << endl; // 临时变量保存原始输入,避免修改原始值影响后续计算 int temp = input_num; int divisor = 1; // 计算最高位对应的除数 while (temp / 10 > 0) { divisor *= 10; temp /= 10; } temp = input_num; // 逐位输出正序数字,同时累加求和 do { int current = temp / divisor; cout << current << " "; sum += current; temp = temp % divisor; divisor /= 10; } while (divisor > 0); cout << endl << "The sum is: " << sum << endl; return 0; }
输入123时运行效果:先输出1 2 3 ,再输出总和6,符合需求。如果需要兼容负数输入,可在代码最开头增加判断,将输入值转为绝对值后再处理即可。
内容的提问来源于stack exchange,提问作者user17081634
相关产品推荐
相关产品推荐

