打印所有不超过n(取n<256)的其平方具有对称性质的数(也称回文数)。
对于要判断的数n,计算出其平方后(存于a),将a的每一位进行分解,再按a的从低到高的顺序将其恢复成一个数k(如n=13,则a=169且k=961),若a等于k则可判定n为回文数。
代码如下:
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- int i,n,a,m[16],k, count =0, t;
- printf("no\tnumber\tvalue\n");
- for(n=1; n<256; n++){
- k=0, t=1, a = n * n;
- for(i=0; a!=0; i++){
- m[i] = a % 10; //从低位到高位数字,分别存在m[0]...m[16]
- a /= 10;
- }
- for(; i>=1; i--){
- k += m[i-1] * t; //计算数字翻转过来的数字
- t *= 10;
- }
- if(k == n*n)
- printf("%d\t%d\t%d\t\n", ++count, n, n*n);
- }
- return 0;
- }
或者在判断是否是回文数的时候,直接比较数组中的内容。
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- int i, n, a, m[16], k, count=0, t;
- printf("no\tnumber\tvalue\n");
- for(n=1; n<256; n++){
- k = 0, t = 1, a = n * n;
- for(i=0; a!=0; i++){
- m[i] = a % 10;
- a /= 10;
- }
- int j = 0;
- for(i--; j<=i; j++, i--){
- if(m[j] != m[i])
- break;
- if(j >= i)
- printf("%d\t%d\t%d\t\n", ++count, n, n*n);
- }
- }
- return 0;
- }
程序执行结果如下:
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
阅读(3160) | 评论(0) | 转发(0) |