Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2545137
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: C/C++

2012-07-06 17:04:46

    打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数)。
对于要判断的数n,计算出其平方后(存于a),将a的每一位进行分解,再按a的从低到高的顺序将其恢复成一个数k(如n=13,则a=169且k=961),若a等于k则可判定n为回文数。
代码如下:

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.   int i,n,a,m[16],k, count =0, t;
  5.   printf("no\tnumber\tvalue\n");
  6.   for(n=1; n<256; n++){
  7.     k=0, t=1, a = n * n;
  8.     for(i=0; a!=0; i++){
  9.       m[i] = a % 10; //从低位到高位数字,分别存在m[0]...m[16]
  10.       a /= 10;
  11.     }

  12.     for(; i>=1; i--){
  13.       k += m[i-1] * t; //计算数字翻转过来的数字
  14.       t *= 10;
  15.     }

  16.     if(k == n*n)
  17.       printf("%d\t%d\t%d\t\n", ++count, n, n*n);
  18.   }
  19.   return 0;
  20. }
或者在判断是否是回文数的时候,直接比较数组中的内容。

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main(int argc, char *argv[])
  3. {
  4.   int i, n, a, m[16], k, count=0, t;
  5.   printf("no\tnumber\tvalue\n");
  6.   for(n=1; n<256; n++){
  7.     k = 0, t = 1, a = n * n;
  8.     for(i=0; a!=0; i++){
  9.       m[i] = a % 10;
  10.       a /= 10;
  11.     }
  12.     int j = 0;
  13.     for(i--; j<=i; j++, i--){
  14.       if(m[j] != m[i])
  15.     break;
  16.       if(j >= i)
  17.     printf("%d\t%d\t%d\t\n", ++count, n, n*n);
  18.     }
  19.   }
  20.   return 0;
  21. }
程序执行结果如下:
no    number    value
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    4494
阅读(3169) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~