给定一个整数,我们需要找到整数的超级数字。
我们使用以下规则定义整数x
的超级数字:
如果x
只有1个数字,则其超级数字为x
否则,超级数字等于x
的数字和的超级数字。这里,数字的数字和被定义为其数字的总和。
示例:
super_digit(9875) = super_digit(9+8+7+5)
= super_digit(29)
= super_digit(2+9)
= super_digit(11)
= super_digit(1+1)
= super_digit(2)
= 2
任务:
您将获得两个号码n
和k
。您必须计算p
的超级数字。当p
连接n
次时,会创建k
。
解决此问题的我的代码如下所示。
#include <bits/stdc++.h>
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
int superDigit(string n, int k)
{
int res=0;
for (int x = 0; x < n.length(); x++)
{
res += n[x] - '0';
}
res = k * res;
if (res < 10)
return res;
else
return superDigit(to_string(res),1);
}
int main() {
string n;
int k;
cin >> n;
cin >> k;
cout << superDigit(n, k)<< endl;
return 0;
}
代码似乎对所有小数字都能正常工作,但在n
时
是1e100000-1
而k
是100000
,程序返回以下错误:
在抛出&#39; std :: bad_alloc&#39;
的实例后终止调用what():std :: bad_alloc
我认为它是内存泄漏,但我该如何解决这个问题。泄漏在哪里发生?
答案 0 :(得分:-1)
您将n
作为1e10000-1
。这大约是1e10000
个字符。假设每个字符的字节大小约为1
。然后,
1e10000 bytes = 1e9997 kilobytes = 1e9994 MB = 1e9994 GB = 1e9991 TB
你可以看到它非常大。