检查一个数字是否是回文

问题描述 投票:3回答:6

我试着通过以下代码检查数字是否是回文:

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。

有谁可以指出错误?

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

c++ palindrome
6个回答
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

5
投票

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


1
投票

x % (unsigned int)pow (10, i)不是第i位。


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;        
}

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);
 }
 }

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 ")

}
© www.soinside.com 2019 - 2024. All rights reserved.