C++循环作业问题:保留最右侧1右侧的数字(含前导零)
解决C++循环作业:保留最右侧1右侧的数字(含前导零)
你的核心问题是用整数存储结果导致前导零丢失——整数类型不会保留前导零,所以必须通过逐位计算并输出的方式保留这些零。以下是符合作业要求的解决方案:
修改后的代码
#include <iostream> using namespace std; int main() { int number; cout << "Enter integer number: "; cin >> number; int temp = number; int divisor = 1; // 定位最右侧的1,计算其右侧数字的位数对应的除数 do { int last_digit = temp % 10; if (last_digit == 1) { break; } temp /= 10; divisor *= 10; } while (temp != 0); // 假设输入至少包含一个数字1 // 提取1右侧的数字部分,并逐位输出(保留前导零) int right_part = number % divisor; cout << "Result = "; int output_divisor = divisor / 10; while (output_divisor >= 1) { int digit = (right_part / output_divisor) % 10; cout << digit; output_divisor /= 10; } cout << endl; return 0; }
代码逻辑说明
定位最右侧的1:
- 用
temp逐步剥离输入数字的最后一位,直到找到数字1。 divisor记录1右侧数字的位数(比如输入431004,找到1时divisor为1000,代表右侧有3位数字)。
- 用
逐位输出保留部分:
right_part通过取模运算得到1右侧的所有数字(整数形式会丢失前导零,但我们不需要直接输出它)。- 通过
output_divisor从高位到低位逐位提取right_part的每一位数字,即使是零也会被逐个输出,从而保留前导零。
测试验证
- 输入
314195→ 输出95 - 输入
45131005→ 输出005 - 输入
431004→ 输出004
内容的提问来源于stack exchange,提问作者Dmitry Finogenov
相关产品推荐
相关产品推荐

