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

C++程序问题:如何实现用户输入数与指定奇数分别相乘并输出正确结果

解决C++程序中分别相乘的问题

嘿,我一眼就看出问题所在啦!你当前的代码里,每次循环都把计算结果重新赋值给了N变量,导致后续的乘法都是基于上一次计算后的结果来进行的,而不是用你最初输入的那个原始数字。比如输入1的时候:

  • 第一次循环:1 * 3 = 3,然后把3存回N
  • 第二次循环:3 * 5 = 15,再把15存回N
  • 以此类推,自然就得到了累积相乘的结果,而不是你想要的分别相乘。

修复方案

你只需要保留原始输入的数字,不要在循环中修改它。有两种简单的方式:

方式1:保存原始输入值

新增一个变量来存储用户最初输入的数字,循环中用这个原始值去和每个奇数相乘:

#include <iostream>
int main() {
    int original_N;
    std::cout << "Input a number: ";
    std::cin >> original_N;
    int limit = 9;
    for(int i = 3; i <= limit; ++i) {
        if(i % 2 != 0) // if odd
        {
            int result = original_N * i;
            std::cout << result << std::endl;
        }
    }
    return 0;
}

方式2:直接使用原始值计算(更简洁)

如果你不需要保留中间结果,甚至可以不用额外变量,直接在输出时计算N * i,同时确保不要修改N的值:

#include <iostream>
int main() {
    int N;
    std::cout << "Input a number: ";
    std::cin >> N;
    int limit = 9;
    for(int i = 3; i <= limit; ++i) {
        if(i % 2 != 0) // if odd
        {
            std::cout << N * i << std::endl; // 直接计算原始N和i的乘积
        }
    }
    return 0;
}

额外优化小建议

其实你的循环是从3到9,步长可以设为2,这样就不需要判断i % 2 != 0了,代码会更高效:

for(int i = 3; i <= limit; i += 2) { // 每次加2,只遍历奇数
    std::cout << N * i << std::endl;
}

现在输入1测试,输出就会是你期望的:

Input a number: 1
3
5
7
9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:57:40