我在代码中出现错误(细分错误)

时间:2019-06-09 05:25:36

标签: c++

问题是找到一个数字,该数字的总和是10的倍数,给定n为数字位数,t为测试用例。 这段代码中出现了细分错误。

using namespace std;
void print(int start, int end, int sum)
{
    if (start == end) {
        return;
    }
    while (start != 0) {
        sum = sum + start % 10;
        start = start / 10;
    }
    if (sum % 10 == 0) {
        cout << start << endl;
        return;
    }
    else {
        print(start + 1, end, 0);
    }
}
int main()
{
    int t;
    cin >> t;
    while (t--) {

        int n;
        cin >> n;
        int start = pow(10, n - 1);
        int end = pow(10, n);
        print(start, end, 0);
    }
}

1 个答案:

答案 0 :(得分:0)

问题在于,在您递归调用print(start + 1, end, 0);时,start变量为零而不是原始值。我想这会导致堆栈溢出。

没有充分的理由在这里使用递归(至少不是在像C ++这样的语言中)。用循环替换递归,不要忘记使用临时变量来进行数字总和计算,而不是浪费start的值。