C 寻找0~100的守形数

#include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 
 int isShouXing(int num);
 int numLength(int num);
 //寻找守形数
 //守形数的平方低位时该数本身
 //例如25*25=625  625的低位有25
 main(){
     //rintf("%d",numLength(55));//ok
     //printf("--%d",isShouXing(23));//ok
     int i=0;
     for(i=0;i<=100;i++){
         if(isShouXing(i)){
             printf("%d,",i);
         }
     }
 }
 
 int isShouXing(int num){
     int flag=0;
     int len=numLength(num);
     //printf("len%d  ",len);
     int sq=num*num;
 
     int yes=1;//假设是守形数//关于一堆数判断是不是XX 一般都先假设是
     //逐个扫描 一旦碰到不是 设为false就结束
     //如果先假设不是 逐个扫描 记下符合条件的次数  再判断该次数是否和预计总次数相等
     //这样想就比较复杂了  需要计算多个变量
     //这种思想同样适用于 寻找回文
     int i=0;
 
     //一个数字有几位 那么对于其平方只比较后几位
     //25只有两位  那么其平方625值比较后面两位
     //取个位数字 十位数字 通过%10的方式
     while(i<len){
         if(  sq%10 !=num%10  ){
             yes=0;
             break;
         }else{
             sq/=10;
             num/=10;
             i++;
         }
     }
     //printf("i=%d",i);
     return yes;
 }
 
 /**
 计算一个数字有几位  10---2位  356---3位
 */
 int numLength(int num){
     int len=1;
     while((num=num/10)!=0){
         len++;
     }
     return len;
 
 }

 

posted @ 2013-03-14 11:00  cart55free99  阅读(450)  评论(0编辑  收藏  举报