-1

オンライン回文センサーを作成しようとしています(アルファベットは0、1、2、3、... 9で構成されています)。コードは次のとおりです。

#include<iostream>
#include<cmath>
using namespace std;

int main()
{
int x=0;
int y=0;

int c;
int i=0;
while(1)
{
cin>>c;
//I keep a track of previous number in x and its reverse in y and use them to create the 
//the new number and reverse at every input. Then I compare x and y. If equal the number is
//a palindrome.
/*eg:(When 121 is entered digit by digit)
  i=0:-
  x=10*0+1    y=0+ 10^0 *1 

  i=1:-
  x=10*1+2    y=1+ 10^1 *2

  i=2:-
  x=10*12+1   y=21+ 10^2 *1
*/
x=10*x+c;
y=y+ static_cast<int>(pow(10.0,static_cast<double>(i)) *c);
cout<<"y= "<<y<<" and "<<"x= "<<x<<endl;
if(y==x)
cout<<"Palindrome"<<endl;

i++;
}    

return 0;
}

まず、1を入力すると、回文として表示されました(予想どおり)。次に、2を入力しましたが、何も起こりませんでした(予想どおり'y= 21 and x= 12'に印刷されました)。しかし、それから私は再び1を入力しましたが、今回も何も起こりませんでした(予想どおりではありません)。これは次のように出力されました。

y= 120 and x= 121

誰か教えてもらえますか、121になるはずだったのにどうやって120になったのですか?

4

1 に答える 1

1

あなたはあまりにも多くの数学をやっています:

public static boolean isPalindrom(char[] word){
    int i1 = 0;
    int i2 = word.length - 1;
    while (i2 > i1) {
        if (word[i1] != word[i2]) {
            return false;
        }
        ++i1;
        --i2;
    }
    return true;
}  

ユーザーが値を入力したときに配列に値を入力し、これと同様の関数を呼び出すだけです。より単純なソリューションが存在する場合、指数の使用はリソースの膨大な浪費です。

于 2012-12-28T20:32:16.113 に答える