-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 回答