error: non-void function does not return a value in all control paths [-Werror,-Wreturn-type]

在刷剑指offer的题目时:

题目描述

给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

我的代码:

class Solution {
public:
    int cutRope(int number) {
        if(number<=1)
            return 0;
        else if(number==2)
            return 1;
        else if(number==3)
            return 2;
        else
        {
            int x=number/3;
            int y=number%3;
            if(y==0)
            {
                return int(std::pow(3, x));
            }
            else if(y==1)
            {
                return int(4*std::pow(3, x-1));
            }
            else if(y==2)
            {
                return int(2*std::pow(3, x));
            }
        }
    }
};

结果编译出错:

编译错误:您提交的代码无法完成编译
In file included from main.cc:2:
./solution.h:27:5: error: non-void function does not return a value in all control paths [-Werror,-Wreturn-type]
}
^
1 error generated.

百度发现

not all control paths return a value 这句话的意思是函数并不是所有分支都有返回值。

分析代码

if(y==0)
            {
                return int(std::pow(3, x));
            }
            else if(y==1)
            {
                return int(4*std::pow(3, x-1));
            }
            else if(y==2)
            {
                return int(2*std::pow(3, x));
            }

这里只包括了y=0 、1、2,三种情况,事实上由于输入参数number是整数,确实也只有这三种情况,但编译器不这样认为,编译器认为还存在其他情况,所以把 else if(y==2)改称else就能包含所有情况了,编译也就不会出现有的情况没有返回值的情况了。

修改

class Solution {
public:
    int cutRope(int number) {
        if(number<=1)
            return 0;
        else if(number==2)
            return 1;
        else if(number==3)
            return 2;
        else
        {
            int x=number/3;
            int y=number%3;
            if(y==0)
            {
                return int(std::pow(3, x));
            }
            else if(y==1)
            {
                return int(4*std::pow(3, x-1));
            }
            else
            {
                return int(2*std::pow(3, x));
            }
        }
    }
};

通过

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页