创建在线回文

时间:2012-12-28 19:02:10

标签: palindrome

我正在尝试创建一个在线回文传感器(字母表由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的?

1 个答案:

答案 0 :(得分: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;
}  

您需要做的就是在用户输入值时为数组填充值并调用与此类似的函数。当存在更简单的解决方案时,使用指数是一种巨大的资源浪费。