在我粘贴的程序中,palindrome2函数在循环中不能正常工作,因为max2给出了输出998000( for循环的上限),而对于单个数字'1441‘,它工作正常,输出为1。你能指导一下吗?
#include <iostream>
long palindrome1(long);
long palindrome2(long);
int main()
{
using namespace std;
long a,b=111,max1=0,max2=0;
for(b=111;b<998001;b++)
{
if((palindrome2(b))==1)
{
max2=b;
}
}
for(a=11;a<998001;a++)
{
if((palindrome2(a))==1)
{
max1=a;
}
}
cout<<max1<<endl;
cout<<max2<<endl;
cout<<palindrome2(1441)<<endl;
cin.clear();
cin.get();
}
long palindrome2(long n)
{
long a[6],b,c=0;
do {
a[c]=n%10;
n=n/10;
c++;
} while(n>0);
b=c;
if(b%2!=0)
{
for(int l=b/2;l>=0;l--)
for(int m=(b/2)+1;m<=b;m++)
{
if(a[l]!=a[m])
{
return 0;
break;
}
}
}
else
{
return 1;
}
}
long palindrome1(long n)
{
long a[6],b,c=0;
do {
a[c]=n%10;
n=n/10;
c++;
} while(n>0);
b=c;
if(b%2==0)
{
for(int k=(b/2)-1;k>=0;k--)
for(int d=((b/2)+1);d<=b;d++)
{
if(a[k]==a[d])
{
return 0;
break;
}
}
}
else
{
return 1;
}
}发布于 2012-12-18 17:00:58
我没有考虑循环边界的情况,但有一些明显的错误:对于所有偶数长度数字,您将返回1。这不可能是正确的。此外,对于奇数长度的数字,如果不匹配,则立即返回0,但如果所有内容都匹配,则不要返回1(跳过else部分,以防这就是您所想的)。
基本上,palindrome2( 10 )将返回1,而palindrome2( 101 )将返回一些垃圾值(这是一个技术术语)。
https://stackoverflow.com/questions/13929317
复制相似问题