0

在我粘贴的程序中,回文2函数在循环中无法正常工作,因为max2给出了输出998000(for循环的上限),而对于一个单独的数字'1441',它工作得很好并且输出为1.Can你请指导???

#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;   
    }
}
4

1 回答 1

2

我没有查看循环边界情况,但有一些彻底的错误:您为所有偶数长度返回 1。那不可能是正确的。此外,对于奇数长度的数字,如果不匹配,您会立即返回 0,但如果所有内容都匹配,则不要返回 1(如果您正在考虑,则跳过 else 部分)。

基本上, palindrome2( 10 ) 将返回 1,而 palindrome2( 101 ) 将返回一些垃圾值(这是一个技术术语)。

于 2012-12-18T09:00:57.673 回答