关闭

回文数的判断(C语言实现)

36人阅读 评论(0) 收藏 举报

http://blog.sina.com.cn/s/blog_5072a15d0100msdb.html 无名小浪

https://zhidao.baidu.com/question/548255538.html zhuhuaizhong

原理:

任何一个数除以10的余数就是该数最后一位
任何一个数除以10的商就是排除掉最后一位后搜索的数(因为 c++ 两个整数相除结果还是整数)

所以 ,一个数1234 就可以通过这种方法得到 123 和 4
接下来对 123 进行同样的操作,就得到 12 和 3
接下来得到 1 和 2
接下来得到 0 和 1

整个过程是个循环,当商不是 0 的时候就一直这么干

每次拿到一个余数,都用来构造新数,新数=新数*10+余数

所以经过四次循环后,我们得到新数 4321 ,如果是回文,那么新数应该等于原数,否则,说明不是回文。

“回文数“是一种数字。如:98789, 这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。

判断一个整数是否是回文数的方法不止一种,最容易想到的一种方法就是:
把整数转换成字符串,然后依次判断字符串前后对称位置的字符是否相等,如果全都相等,则表示该整数是回文数,否则不然。

然而,还有一种更为简洁点的方法则是:
通过对整数的计算,得到该整数的反序整数(最低位变成最高位),判断两者是否相等,是则表示该整数是回文数,否则不然。
以下给出了这种简洁判断方法的C语言代码实例,如下:

--------代码开始--------

#include <stdio.h>
#include <stdlib.h>

int IsHuiWenShu( int );

int main( int argc, char* argv[] )
{
    int num;
    int ret = 0;
    while ( 1 )
    {
        printf( "Please input an interage number:\n" );
        scanf( "%d",& num );
        if ( num == -100 )
        {
            printf( "You input %d, so exit.\n", num );
            break;
        }
        ret = IsHuiWenShu( num );
        if ( ret == 0 )
        {
            printf( "The number %d is not huiwenshu.\n", num );
        }
        else
        {
            printf( "The number %d is huiwenshu.\n", num );
        }
    }

    return 0;
}

int IsHuiWenShu( int number )
{
    int res = 0;
    int n = number;

    if ( n< 0 )
    {
        return 0;
    }

    do
    {
        res = res * 10 + n % 10;
        n = n / 10;
    } while ( n );

    if ( res == number )
    {
        return 1;
    }

    return 0;
}

--------代码结束--------

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:64次
    • 积分:4
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档