C趣味程序(二)(13)同构数

文章作者 100test 发表时间 2007:03:10 17:38:30
来源 100Test.Com百考试题网


2.8 同构数
正整数n若是它平方数的尾部,则称n为同构数。例如,6是其平方数36的尾部,76是其平方数5776的尾部,6与76都是同构数。
试求指定位数的同构数序列。
1、算法分析:
对指定范围内的每一个整数a,求出其平方,判断a是否是其平方的尾部,通常有以下方法:
通过字符串子串比较找出同构数。
为了求更高位数的同构数,可应用同构数的以下性质:一个m位同构数的尾部m-1位数也是一个同构数。道理很简单,a是一个m位数,a的平方数尾部的m-1位仅由a尾部的m-1位决定而与a的最高位无关。
易知一个同构数有三个:1,5,6,则二位同构数的个位数字只可能是1,5,6这三个数字。
根据这一思路,我们可应用递推求出多位同构数串。

2.求指定区间内的同构数
程序代码如下:
#include
#include
#include
char *right(char *ms,int len). /*截取一个字符串尾部长为len个字符的子串*/
void main()
{
long a.
int len.
char as[10].
char ms[20].
printf("求[1,10000]中的同构数:\n").
for(a=1.a<=10000.a )
{
ultoa(a,as,10). /*数a转换为字符串,存入as*/
len=strlen(as).
ultoa(a*a,ms,10).
if(strcmp(as,right(ms,len))==0) /*比较字符串as与ms长为len的子串是否相等*/
printf("%s 其平方为 %s\n",as,ms). /*相等就是同构数,输出结果*/
}
}
char *right(char *ms,int len) /*截取字符串尾部长为len子串的函数*/
{
int i,j.
for(i=0.i<(signed)strlen(ms).ms ).
for(j=0.j return ms.
}

程序运行结果如下:




相关文章


全国计算机等级考试二级Access考点分析之报表(6)
C语言编程常见问题解答之常用函数的包含文件(1)
C趣味程序(二)(13)同构数
全国计算机等级考试二级Access考点分析之报表(4)
C趣味程序(二)(12)求n环相亲数链
全国计算机等级考试二级Access考点分析之报表(5)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛