【发布时间】:2017-05-09 09:21:39
【问题描述】:
在向 USACO 网站提交这个程序(双回文)时,我收到一条错误消息说
“运行 3:执行错误:您的程序 (`dualpal') 以
信号 #11(分段违规[可能是由于访问
内存超出范围,数组索引超出范围,使用错误
指针(open() 失败,malloc 失败),或超过最大值
指定的内存限制])。程序运行了 0.011 CPU 秒
在信号之前。它使用了 4184 KB 的内存。”
有人可以帮我解决这个问题吗?
提前致谢:)
我认为这不是内存问题,因为它使用的内存量与其他测试和程序相同 (4184 KB)。
问题: 一个从右到左读法与从左到右读法相同的数称为回文数。 数字 21(以 10 为底)不是以 10 为底的回文,但数字 21(以 10 为底)实际上是以 2(10101)为底的回文。 编写一个读取两个数字(以 10 为基数)的程序: N (1
我的代码:
//include all necessary header files
using namespace std;
struct DivResults
{
int remainder;
int quotient;
};
DivResults remAndQuo(int numerator,int radix,int exponent)
{
DivResults retVal;
double a=numerator,b=radix,c;
c=pow(b,exponent);
int rPowi=c;
retVal.remainder=numerator%rPowi;
retVal.quotient=numerator/rPowi;
return retVal;
}
char *myOwnItoa(int num,int radix)
{
char *returnArr,charQuotient;
int exp=0,remainder,quotient,j=0;
int rPowi;
returnArr=new char[12];
/*
find max exponent of radix where it is just less than or equal to
num
*/
for(;pow(radix,exp)<=num;exp++);
exp--; // subtracting by 1 to cancel the extra increment in for loop
/*
iterate from max exponent to 0
to convert each digit into its radix base.
*/
for(;exp>=0;exp--)
{
DivResults retVal=remAndQuo(num,radix,exp);
charQuotient=retVal.quotient+'0';
returnArr[j]=charQuotient;
num=retVal.remainder;
j++;
}
returnArr[j]='\0';
return returnArr;
}
bool palindrome(char answer[])
{
int n,x=0;
for(x=0;answer[x]!='\0';x++);
n=x;
int i=0,j=n-1;
if(n%2==0)
{
int middle1=(n-1)/2;
int middle2=(n+1)/2;
while(i<=middle1 && j>=middle2)
{
if(answer[i]!=answer[j])
return false;
i++;
j--;
}
return true;
}
else
{
int middle=n/2;
while(i<middle && j>middle)
{
if(answer[i]!=answer[j])
return false;
i++;
j--;
}
return true;
}
}
int main()
{
ofstream fout("dualpal.out");
ifstream fin("dualpal.in");
int n,s,check=0,palCheck=0,num;
char *CharAnswerNum;
fin>>n>>s;
num=s+1;
for(;check<n;)
{
for(int base=2;base<=10;base++)
{
CharAnswerNum=myOwnItoa(num,base);
bool isPal=palindrome(CharAnswerNum);
if(isPal==true)
{
palCheck++;
}
}
if(palCheck>=2)
{
fout<<num<<"\n";
check++;
}
num++;
palCheck=0;
}
}
【问题讨论】:
-
这就是调试器存在的原因。 for(;pow(radix,exp)
-
@OldProgrammer 此代码在我的电脑上运行,但当我将其提交到 USACO 网站时,出现错误。