3

我尝试使用以下代码检查数字是否为回文:

unsigned short digitsof (unsigned int x)
{
    unsigned short n = 0;
    while (x)
    {
        x /= 10;
        n++;
    }
    return n;
}

bool ispalindrome (unsigned int x)
{
    unsigned short digits = digitsof (x);

    for (unsigned short i = 1; i <= digits / 2; i++)
    {
        if (x % (unsigned int)pow (10, i) != x % (unsigned int)pow (10, digits - 1 + i))
        {
            return false;
        }
    }
    return true;
}

但是,以下代码无法检查回文 - 即使数字是回文,也始终返回 false。

谁能指出错误?

(请注意:我没有兴趣将它变成一个字符串并将其反转以查看问题所在:相反,我有兴趣知道上述代码中的错误在哪里。)

4

6 回答 6

5

我个人只是从数字中构建一个字符串,然后将其视为正常的回文检查(检查前半部分中的每个字符是否与 中的字符匹配length()-index)。

于 2013-09-17T12:32:27.337 回答
1

问题是这样的:

x % (unsigned int)pow (10, i)

我们试试看:

x =504405
i =3

SO I want 4.

x % 10^3 => 504405 %1000 => 405 NOT 4

怎么样

x / (unsigned int)pow (10, i -1) % 10
于 2013-09-17T12:30:33.553 回答
1

x % (unsigned int)pow (10, i)不是第 i 个数字。

于 2013-09-17T12:33:17.810 回答
0

只是为了了解更多信息!以下两个功能对我有用:

double digitsof (double x)
{
    double n = 0;
    while (x > 1)
    {       
        x /= 10;
        n++;
    }
    return n;
}

bool ispalindrome (double x)
{
    double digits = digitsof (x);
    double temp = x;
    for(double i = 1; i <= digits/2; i++)
    {
        float y = (int)temp % 10;
        cout<<y<<endl;
        temp = temp/10;

        float z = (int)x / (int)pow(10 , digits - i);
        cout<<(int)z<<endl;
        x = (int)x % (int)pow(10 , digits - i);

        if(y != z)
            return false;

    }
    return true;        
}
于 2013-09-17T13:36:22.173 回答
0

我已经用我自己的解决方案做到了这一点,该解决方案受这些条件的限制

  1. 不要将 int 转换为字符串。
  2. 不要使用任何辅助函数。
var inputNumber = 10801

var firstDigit = 0

var lastDigit = 0

var quotient = inputNumber



while inputNumber > 0 {

    lastDigit = inputNumber % 10

    var tempNum = inputNumber

    var count = 0

    while tempNum > 0 {

        tempNum = tempNum / 10

        count = count + 1

    }

    var n = 1

    for _ in 1 ..< count {

        n = n * 10

    }

    firstDigit = quotient / n

    if firstDigit != lastDigit {

        print("Not a palindrome :( ")

        break

    }

    quotient = quotient % n

    inputNumber = inputNumber / 10

}

if firstDigit == lastDigit {

    print("It's a palindrome :D :D ")

}
于 2019-02-27T13:15:20.833 回答
0

检查给定数字是否在 JAVA 中是否为回文的代码

import java.util.*;
public class HelloWorld{

private static int countDigits(int num) {
    int count = 0;
    while(num>0) {
        count++;
        num /= 10;
    }
    return count;
}
public static boolean isPalin(int num) {
    int digs = HelloWorld.countDigits(num);
    int divderToFindMSD = 1;
    int divderToFindLSD = 1;

    for (int i = 0; i< digs -1; i++)
    divderToFindMSD *= 10;

    int mid = digs/2;  

    while(mid-- != 0)
    {
        int msd = (num/divderToFindMSD)%10;
        int lsd = (num/divderToFindLSD)%10;
        if(msd!=lsd)
        return false;

        divderToFindMSD /= 10;
        divderToFindLSD *= 10;
    }
    return true;

}

 public static void main(String []args) {
    boolean isPalin = HelloWorld.isPalin(1221);
    System.out.println("Results: " + isPalin);
 }
 }
于 2018-07-25T05:37:45.020 回答