C语言20行代码求小于等于10000的所有同构数。

原创 2018年04月15日 00:47:50

问题:平方后低位的数恰好等于该数的数是同构数。求小于10000的所有同构数。

编译环境:vc6.0 

#include<stdio.h>
#include<math.h>                                     //调用 pow()函数。
void main()
{
    int n,i,m,k;                                     //定义:n为位数,i为循环数,
                                                     //m和k为i的平方数(两者用途不同,k可以用i*i代替)。
    for(i = 1;i <= 10000;i++){                       //循环。(范围为1~10000,可修改)
        k = i * i;
        n = 1;                                       //当平方数小于1时,位数为1.
        m = k;                                           
        while(m >= 10) {n++;m /= 10;}                //算平方数的位数。
        if(n % 2 == 0){                              //当平方数的位数为偶数时。
                                                     //注:此处大括号不可去,否则第二个if会与else对齐。
            if(i == k % (int)pow(10,(n / 2)))        //判断 i 是否等于 平方数 对 低位的数 取得的余数。
                printf("%d\n",i);}                   //输出 i ,若想在输出平方数,则加上 k 即可。 
        else{                                        //当平方数的位数为奇数时。注:此处大括号可去。
            if(i == k % (int)pow(10,((n + 1) / 2)))
                printf("%d\n",i);}
    } system("pause");                               //vc6.0 需在for循环后加上 system("pause"); 
}

关于这一行代码:

  if(i == k % (int)pow(10,(n / 2)))

1、k可以用 i*i 代替。

2、取余符号 % 不能用于浮点数,只能用于整数。

3、pow()函数在vc6.0里原型为 double pow( double x, double y );  返回值为double类型,故需要转化为int型。

4、代码的意思是 先计算平方数 i*i 的低位位数(即把平方数 向上取 对半分,分为高位数和低位数两部分,比如数 964852 的低位数为 852,位数即3,;数26547 的低位数为 547 ,位数即 3),然后对平方数对 10 的低位位数次幂 取余(比如当 k 为 3264 时,取余后为 64,低位位数次幂为 2),最后与 i 相比较。

代码运算结果为:



华为OJ:查找同构数的数量

描述:  找出1至n之间同构数的个数。同构数是这样一组数:它出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。 详细描述: 接...
  • u010889616
  • u010889616
  • 2016-01-30 12:22:49
  • 596

C语言求1000以内守形数

若正整数n是它的平方数的尾部,则称n为守形数,又称同构数。例如:6是其平方数36的尾部,76是其平方数5776的尾部,6和76都是守形数。...
  • johnWcheung
  • johnWcheung
  • 2017-06-01 13:54:30
  • 1052

'同构数是会出现在它的平方的右边的数

'同构数是会出现在它的平方的右边的数 Dim aa = Enumerable.Range(1, 10000).Select(Function(bb) IIf((bb * bb).ToS...
  • xianfajushi
  • xianfajushi
  • 2015-07-01 09:28:58
  • 399

求1-10000之间的同构数

“同构数”是指这样的整数:它恰好出现在其平方数的右端。如:376*376=141376。请找出10000以内的全部“同构数” 来自360问答的题目,试着写了写,好歹实现了。 /*总结思路: 1.求...
  • u010345869
  • u010345869
  • 2014-12-08 14:58:34
  • 2902

C语言20行代码求小于等于10000的所有同构数。

问题:平方后低位的数恰好等于该数的数是同构数。求小于10000的所有同构数。编译环境:vc6.0 #include&amp;lt;stdio.h&amp;gt; #include&amp;lt;mat...
  • Higashino_Keigo
  • Higashino_Keigo
  • 2018-04-15 00:47:50
  • 148

Python3实现求小于10000的同构数

问题:平方后低位的数恰好等于该数的数是同构数。求小于10000的所有同构数。编译环境:Python3 + Spyder一般的代码如下:for i in range(10000): k = str...
  • Higashino_Keigo
  • Higashino_Keigo
  • 2018-04-15 11:06:18
  • 19

10000以内的同构数

/*找出10000以内的同构数 同构数 376*376=141376 思路:1、输入一个数num 先判断是几位数。记住数位length。 2、然后算它(num)的平方, square...
  • xtayaitak
  • xtayaitak
  • 2010-10-08 00:46:00
  • 3513

C语言之基本算法20—同构数

/* ================================================================== 题目:1~10000内的同构数!若一个正整数出现在它的平方数...
  • LZX19901012
  • LZX19901012
  • 2015-07-07 13:46:43
  • 2344

判断同构数

问题描述给定一个十进制正整数,判断其是否为同构数。所谓同构数是这样的一些数,它出现在其平方数的右边,例如5是右边的数,25是右边的数,所以5和25都是同构数。输入输入数据有若干行。每行上有一个正整数,...
  • stephancai
  • stephancai
  • 2011-01-17 14:29:00
  • 1022

P52 第30题 同构数问题

 #include int main() {  int a,b;  printf("10000以内的同构数:\n");  for(a=0;a  {   b=a*a;   if(b...
  • ljs2015quan
  • ljs2015quan
  • 2015-04-05 12:43:24
  • 228
收藏助手
不良信息举报
您举报文章:C语言20行代码求小于等于10000的所有同构数。
举报原因:
原因补充:

(最多只允许输入30个字)