I00010 打印1到输入数之间的回文数

对于一个数,要判定它是否是回文数,直观的做法是先判定其最高位首位)与最低位最后一位)是否相同,如果不同则不是回文数;如果相同则其掉其做高位和最低位,对剩余的位继续进行判定;如果剩余的位只有一位或零位(即整个数是偶数位)则为回文数。

本程序就是基于这样的基本思想进行计算的。

本程序通用性强,可以计算1到任意指定数之间的所有回文数。

计算回文数还可以用数字字符组合的方法来实现,算法上采用回溯法。

程序如下:

/* 打印输出1到输入数之间的回文数 */

#include 

int isPalindrome(long, long);

int main(void)
{
    long n, i, mod = 1;

    scanf("%ld", &n);
    for(i=1; i<=n; i++) {
        if(i == mod * 10)
            mod *= 10;
        if(isPalindrome(i, mod))
            printf("%ld ", i);
    }
    printf("\n");

    return 0;
}

// 判断n是否为回文数的函数
// 参数n为需要判断是否为回文数的数
// 参数bigmod,若n为m位数,其值为10^m-1(10的m-1次方)
// 参数bigmod必须事先正确设置
int isPalindrome(long n, long bigmod)
{
    int flag = 1;

    for(;;) {
        // 判断首位与末位是否相同,不同则不是回文数
        if(n/bigmod != n%10) {
            flag = 0;
            break;
        }

        // 如果只剩下1位或2位结束
        if(bigmod <= 10)
            break;

        // 去掉最高位和最低位
        n %= bigmod;
        n /= 10;
        bigmod /= 100;
    }

    return flag;
}
关键代码:

// 判断n是否为回文数的函数
// 参数n为需要判断是否为回文数的数
// 参数bigmod,若n为m位数,其值为10^m-1(10的m-1次方)
// 参数bigmod必须事先正确设置
int isPalindrome(long n, long bigmod)
{
    int flag = 1;

    for(;;) {
        // 判断首位与末位是否相同,不同则不是回文数
        if(n/bigmod != n%10) {
            flag = 0;
            break;
        }

        // 如果只剩下1位或2位结束
        if(bigmod <= 10)
            break;

        // 去掉最高位和最低位
        n %= bigmod;
        n /= 10;
        bigmod /= 100;
    }

    return flag;
}
输入20000时,程序运行结果如下:

I00010 打印1到输入数之间的回文数_第1张图片


你可能感兴趣的:(#,趣味程序设计,#,趣味程序,趣味程序,回文数)