正文

28.回文数2005-09-10 15:12:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/xiangyu/1680.html

分享到:

28.回文数
打印所有不超过n(取n<256) 的其平方具有对称性质的数(也称回文数)。
*题目分析与算法设计
对于要判断的数n,计算出其平方后(存于a),将a的每一位进行分解,再按a的从低到高的顺序将其恢复成一个数k(如n=13,则a=169且k=961),若a等于k则可判定n为回亠数。
*程序说明与注释

原程序好像有错,而且比较费解,现基于原程序修改如下(如果读者还发现错误请提出):

#include<stdio.h>
int main(void)
{
    int m[16],n,i,t,count=0;
    long unsigned a,k;
    printf("No. number it's square(palindrome)\n");
    for(n=1;n<256;n++) /*穷举n的取值范围*/
    {
        k=0;t=1;a=n*n; /*计算n的平方*/
       
        for(i=0;a!=0;i++) /*从低到高分解数a的每一位存于数组m[0]~m[16]*/
        {
            m[i]=a%10;//这个是取得a的个位,整个循环合起来就可以取得各个位
            a/=10;
        }
       
        int j=0;
        for(i--;j<i;j++,i--)//因为n的平方的各个位都存在数组中了,下面判断是不是对称
            if(m[j]!=m[i])break;//只要有一位不是对称,那就说明不是对称,就可以退出了

        //所有的位都对称就说明是对称了,这样就可以打印出结果了
        if(j>=i)printf("%2d%10d%10d\n",++count,n,n*n);

    }

    return 0;
}

*运行结果
No. number it's square(palindrome)
1 1 1
2 2 4
3 3 9
4 11 121
5 22 484
6 26 676
7 101 10201
8 111 12321
9 121 14641

10 202  40804
11 212 44944



//下面程序是原来的,有错,而且费解
#include<stdio.h>
int main(void)
{
    int m[16],n,i,t,count=0;
    long unsigned a,k;
    printf("No. number it's square(palindrome)\n");
    for(n=1;n<256;n++) /*穷举n的取值范围*/
    {
        k=0;t=1;a=n*n; /*计算n的平方*/
       
  for(i=1;a!=0;i++) /*从低到高分解数a的每一位存于数组m[1]~m[16]*/
        {
            m[i]=a%10;//安安注:这个是取得a的个位,整个循环合起来就可以取得各个位,并存于数组中,为了是下面判断是不是对称
            a/=10;
        }
       
        for(;i>1;i--)
        {
            k+=m[i-1]*t;
            t*=10;
        }
        if(k==n*n)
            printf("%2d%10d%10d\n",++count,n,n*n);
    }

 return 0;
}

*运行结果
No. number it's square(palindrome)
1 1 1
2 2 4
3 3 9
4 11 121
5 22 484
6 26 676
7 101 10201
8 111 12321
9 121 14641

阅读(6532) | 评论(9)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册