第一个代码中的错误,但第二个正确"在抛出' std :: bad_alloc'的实例后调用终止what():std :: bad_alloc Aborted(core dumped)"

时间:2018-05-29 19:01:46

标签: c++

我的代码在第一个代码中给出错误,但第二个代码正在运行而没有任何错误"在抛出' std :: bad_alloc'的实例后调用终止what():std :: bad_alloc Aborted(core dumped)"     //首先

#include<bits/stdc++.h>
using namespace std;
int main()
{
    //code
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        string res;
        while(n)
        {
            res.push_back((n%26)  + 'A');
            n=n/26;
            n-=1;
        }
        reverse(res.begin(),res.end());
        cout<<res<<endl;
    }
    return 0;
}

第二个代码如下所示,没有任何错误,任何人都可以告诉我为什么会出现这个错误

while(n)
{
    n-=1;
    res.push_back((n%26)  + 'A');
    n=n/26;
}

1 个答案:

答案 0 :(得分:0)

第一个例子中的问题是

while(n)
{
    res.push_back((n%26)  + 'A');
    n=n/26;
    n-=1;
}

将成为无限循环。为什么?因为n/26是整数除法。这意味着当n < 26 && n > -26除法将返回0.当你在循环结束时减去一个时,会发生的是n将始终为-1:-1/26 = 00 - 1 = -1。因此,您的字符串将变得太大,这就是导致std::bad_alloc

的原因

第二个版本的工作正常,因为你在除以26之前减去一个,这意味着当循环以n=0开始时会有一个点