1、算法分析:
专注于为中小企业提供成都网站制作、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业龙潭免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
对指定范围内的每一个整数a,求出其平方,判断a是否是其平方的尾部,通常有以下方法:
通过字符串子串比较找出同构数。
为了求更高位数的同构数,可应用同构数的以下性质:一个m位同构数的尾部m-1位数也是一个同构数。道理很简单
,a是一个m位数,a的平方数尾部的m-1位仅由a尾部的m-1位决定而与a的最高位无关。
易知一个同构数有三个:1,5,6,则二位同构数的个位数字只可能是1,5,6这三个数字。
根据这一思路,我们可应用递推求出多位同构数串。
2.求指定区间内的同构数
程序代码如下:
#includestdio.h
#includestdlib.h
#includestring.h
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;jlen;j++,ms--);
return ms;
}
int fun(int x)
{
int a,b=10,c=0;
a=x;
while(a/10!=0){b*=10;a/=10;} /*判断x是几位数*/
a=x*x;
c=(a%b==x)? 1:0;
return c;
}
1、首先在电脑中,打开visual C++ 6.0-文件-新建-文件-C++ Source File。
2、输入预处理命令和主函数,如下图所示。
3、定义变量并输入数值,如下图所示。
4、接着计算a是否是完美数,如下图所示。
5、最后点击页面上方的运行,如下图所示,就完成了。