You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 定位最右侧的1:

    • 用temp逐步剥离输入数字的最后一位,直到找到数字1。
    • divisor记录1右侧数字的位数(比如输入431004,找到1时divisor为1000,代表右侧有3位数字)。
  2. 逐位输出保留部分:

    • right_part通过取模运算得到1右侧的所有数字(整数形式会丢失前导零,但我们不需要直接输出它)。
    • 通过output_divisor从高位到低位逐位提取right_part的每一位数字,即使是零也会被逐个输出,从而保留前导零。

测试验证

  • 输入314195 → 输出95
  • 输入45131005 → 输出005
  • 输入431004 → 输出004

内容的提问来源于stack exchange,提问作者Dmitry Finogenov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 07:43:24