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

如何解决C++程序重复打印Try Again及末尾额外输出0的问题

问题根因
  • 重复打印Try Again的原因:你写的for循环会从1遍历到输入值y的所有整数,每轮循环都会做一次判断,只要当前i的立方不等于y就打印一次Try Again。比如输入8时,i从1到8共8轮循环,仅i=2时符合完全立方判断,剩下7次都会打印Try Again,才会出现多次提示的问题。
  • 末尾多出0的原因:main函数中你调用了cout << whatcube(y);,而whatcube函数的返回值是硬编码的int类型0,这行代码会把函数返回的0直接打印到输出末尾,所以多了个0。
修复后的代码
#include <iostream>
using namespace std;

// 改成void类型,不需要返回值
void whatcube(int y);

int main(){
    int y;
    cout << "Enter a perfect cube:";
    cin >> y;
    // 直接调用函数即可,不用cout输出返回值
    whatcube(y);
    return 0;
}

void whatcube(int y){
    bool is_cube = false;
    int match_i = 0;
    // 不用遍历到y,遍历到立方大于y就可以停止,优化性能
    for(int i=1; i*i*i <= y; i++){
        if(i*i*i == y){
            is_cube = true;
            match_i = i;
            // 找到匹配直接跳出循环,不用继续遍历
            break;
        }
    }
    // 循环结束后只打印一次结果
    if(is_cube){
        cout << "This is a perfect cube! It's the cube of " << match_i << "." << endl;
    }else{
        cout << "Try Again." << endl;
    }
}
额外优化建议
  • 如果要处理负数的完全立方判断,可以给输入的y取绝对值做判断,匹配后i的符号和y保持一致即可。
  • 输入值很大的话,可以用long long类型替代int,避免iii溢出int的取值范围导致判断错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:01