No. 23 - Palindrome Numbers

本文详细介绍了两种方法来判断一个整数是否为回文数:第一种方法是将整数转换为字符串,然后检查字符串是否为回文;第二种方法是构建反转后的数字并与原始数字进行比较。文章提供了相应的代码实现,帮助开发者理解和实现这些方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

No. 23 - Palindrome Numbers

 

Problem: Please implement a function which checks whether a numberis a palindrome or not. For example, 121 is a palindrome, while 123 is not.

 

Analysis: Many candidates can get a straightsolution which converts the input number into a string first. However, it isnot what interviewers expect usually.

 

Solution 1: Convert a Number into a String

 

It is easy tocheck whether a number is palindrome or not: We can check whether the firstcharacter and the last one are identical, and then check the second characterand the second one from end, and so on. Therefore, we can firstly convert theinput number into a string via the functionsprintf, and then check whether the string is apalindrome.

 

This solutioncan be implemented as the following code:

 

bool IsPalindrome_solution1(unsigned int number)

{

    const int NUMBER_LENGTH = 20;

    char string[NUMBER_LENGTH];

   sprintf(string, "%d",number);

 

    return IsPalindrome(string);

}

 

bool IsPalindrome(const char* const string)

{

    bool palindrome = true;

    if(string != NULL)

   {

        int length = strlen(string);

        int half = length >> 1;

 

        for(int i = 0; i < half; ++ i)

       {

            if(string[i] != string[length - 1 - i])

           {

               palindrome = false;

                break;

           }

       }

   }

 

    return palindrome;

}

 

Usually thesolution above is not the one expected by interviewers. One reason is that itis intuitive while interviewers expect something innovative, and the other isthat it requires auxiliary memory to store the converted string.

 

Solution 2: Compose a Reversed Number

 

As we know, itis easy to get digits from right to left via / and % operators. For example,digits in the number 123 are 3, 2 and 1. We can construct a reversed number 321with these three digits. And then we check whether the reverse number isidentical to the original one. If it is, the original number is a palindrome.

 

Itscorresponding code is shown below:

 

bool IsPalindrome_solution2(unsigned int number)

{

    int reversed = 0;

    int copy = number;

 

    while(number != 0)

   {

       reversed = reversed * 10 + number % 10;

       number /= 10;

   }

 

    return (reversed == copy);

}

 

The author HarryHe owns all the rights of this post. If you are going to use part of or thewhole of this ariticle in your blog or webpages,  please add a referenceto http://codercareer.blogspot.com/. If you are going to use it in yourbooks, please contact me (zhedahht@gmail.com) . Thanks.  

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值