回文数

来源:互联网 发布:小程序 app.js 编辑:程序博客网 时间:2024/06/07 02:51

任取一个十进制整数,将其倒过来后与原来整数相加,得到一个新的整数后重复上面步骤,最终可以得到一个回文数。

第一次方案:

#include <stdio.h>



int jud(int a);


int main()
{
    int i;
    int j1 = 0;
    int j2 = 10;
    int k;
    int k1;
    int a[10];
    int j3;
    int j4;
    int j5;
    int cont;
    printf("input : ");                              //输入要进行计算的数
    scanf("%d", &j3);
    while (jud(j3))                                //对输入的数/相加的数进行判断是否是回文数
    {
        j4 = j3;
        j5 = j3;
        for (cont = 0; j4 != 0; cont++)                  //判断这个数的位数
            j4 /= 10;
        for (i = 1, k = 1; i < cont; i++)                   //得出一个与输入数位数相同的10次方数
            k *= 10;
        k1 = k;
        for (i = 0; i < cont; i++)                          //将这个数分解为数组的形式
        {
            a[i] = j5/k1;
            j5 %= k1;
            k1 /= 10;
        }
        j1 = j5;              
        for (i = 0, j2 = 0, k = 1; i < cont; i++)             //将输入数倒置
        {
            j2 += a[i] * k;
            k *= 10;
        }
        j3 = j1 + j2;                        //将倒过来的数与原数相加得到新的数
        printf("%10d + %10d = %10d\n", j1, j2, j3);
    }


    return 0;
}


int jud(int a)                   //判断回文数的函数
{
    int i;
    int k;
    int c;
    int cont = 0;
    int b[10];
    int l;
    int n;
    c = a;
    l = a;
    for (cont = 0; c != 0; cont++)              //判断输入数的位数
        c /= 10;
    n = cont;
    for (i = 1, k = 1; i < cont; i++)              
        k *= 10;
    for (i = 0; i < cont; i++)
    {
        b[i] = a/k;
        a %= k;
        k /= 10;
    }
    for (i = 0, cont = 0; i < n / 2; i++)                 //将首尾的数组分别比较,判断是否是回文数
    {
        if (b[i] == b[n - 1 - i])
            cont++;
    }
    if (cont == (n / 2))
    {
        printf("output : %10d\n", l);
        return 0;
    }
    else
        return 1;

但是判断函数可以改进

改进之后

long re(long int a)            //求输入整数的反序数

{

    long int t;

    for (t = 0; a > 0; a /= 10)          //将整数反序

        t = t * 10 + a % 10;

    return (t);                         //返回反序值

}

nonre(long int s)           //判断是否为回文数
{

    if (re (s) == s)            //判断原来值是否与反序值相同,相同返回1,不同返回0

        return 1;

    else

        return 0;

}

原创粉丝点击