我的代码在第一个代码中给出错误,但第二个代码正在运行而没有任何错误"在抛出' 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;
}
答案 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 = 0
和0 - 1 = -1
。因此,您的字符串将变得太大,这就是导致std::bad_alloc
。
第二个版本的工作正常,因为你在除以26之前减去一个,这意味着当循环以n=0
开始时会有一个点