天天看点

C语言 同构数的算法

“同构数”是指这样的整数:它恰好出现在其平方数的右端。

如:376*376=141376。请输出10000以内的全部“同构数”。

算法分析:

1.求出1-10000之间每个数的位数(即这个数是几位数)。设这个数是i.

//用for循环实现,

2.再求出每个数的平方值,提取出最右端对应位数的数值出来。

//用取模%法实现。

如369是个三个数,它的平方是136161,用取模%法提取出最右三位数字161,即136161%1000=161

3.最后判断 i 与右端数 是否相等,相等即为同构数。

//用if语句实现判断

代码实现:

#include <stdio.h>
main( )
{ for(int i=1;i<=10000;i++)
  { //位数有哪些可能呢?个,十,百,千。
  if(0<=i&&i<=9)//个位数,即一位数
  { if(i==(i*i)%10)//如何表示这些位数呢?
    printf("%d*%d=%d\n",i,i,i*i); 
    }
  if(10<=i&&i<=99)//十位数,即两位数 
  { if(i==(i*i)%100)
    printf("%d*%d=%d\n",i,i,i*i); 
    }
  if(100<=i&&i<=999)//百位数,即三位数
  { if(i==(i*i)%1000)
    printf("%d*%d=%d\n",i,i,i*i);
    }
  if(1000<=i&&i<=9999)//千位数,即四位数
  { if(i==(i*i)%10000)
    printf("%d*%d=%d\n",i,i,i*i);
    }
  if(i==10000)
  { //当i为10000时,显然不是同构数,故不作判定 
    } 
   } 
}