“同构数”是指这样的整数:它恰好出现在其平方数的右端。
如: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时,显然不是同构数,故不作判定
}
}
}