0

私が貼り付けているプログラムでは、max2 が出力 998000 (for ループの上限) を与えているため、palindrome2 関数がループ内で正しく動作していませんが、個々の番号 '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 に答える