❶ 找出1-1000的同构数
public class test {
public static void main(String[] args) {
//这是个很复杂很笨的办法,不想去%10,麻烦,直接这样写吧,这是把数看出一个字符串来对待
for(int x=0;x<=1000;x++){
int y=x*x;
String x1=String.valueOf(x);
String y1=String.valueOf(y);
if(x1.equals(y1.substring(y1.length()-x1.length(), y1.length())))
System.out.print(x+" ");
}}}
❷ c语言求同构数
1、算法分析:
对指定范围内的每一个整数a,求出其平方,判断a是否是其平方的尾部,通常有以下方法:
通过字符串子串比较找出同构数。
为了求更高位数的同构数,可应用同构数的以下性质:一个m位同构数的尾部m-1位数也是一个同构数。道理很简单
,a是一个m位数,a的平方数尾部的m-1位仅由a尾部的m-1位决定而与a的最高位无关。
易知一个同构数有三个:1,5,6,则二位同构数的个位数字只可能是1,5,6这三个数字。
根据这一思路,我们可应用递推求出多位同构数串。
2.求指定区间内的同构数
程序代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.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;j<len;j++,ms--);
return ms;
}
❸ 求1000以内的同构数
PrivateSubCommand1_Click()
DimiAsInteger'求1000以内的同构数。
Fori=1To100
Ifi=Val(Right(Str(i*i),Len(i)))ThenPrinti
'IfStr(i)=Str(Right(Str(i*i),Len(i)))ThenPrinti'这样也行。都str转一下再比较相等
Next
EndSub
输出12576
❹ C语言编程求出1~1000的同构数
#include"stdio.h"
int main()
{
long i,j,k;
k=10;
for (i=1;i<=10000;i++)
{
if (i==k) k*=10;
j=i*i;
if(j%k==i) printf("%ld\t%ld\n",i,j);
}
return 0;
}
❺ c语言编程:找出1到1000的全部同构数
#include<stdio.h>
intIsTongGou(inta){//判断是否同构
intb=a*a;
while(a!=0){
if(b%10!=a%10){
return0;
}else{
b=b/10;
a=a/10;
}
}
return1;
}
intmain(){
for(inti=1;i<1000;i++){
if(IsTongGou(i)){
printf("%d",i);
}
}
printf(" ");
}
❻ C程:求1到100内的所有同构数
for循环中没有上限,有3种可能m<i*100,m=i*100,m>i*100,可以改变条件还有break的位置不对应该是if(n==m*m&&n==m+i*1000){printf("%d\n",m);break;}return0;前的break;去掉
❼ c语言 打出1~1000所有的同构数
#include<stdio.h>
#include<stdlib.h>
#include<string.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); /*相等就是同构数,输出结果*/
}
system("pause");
}
char *right(char *ms,int len) /*截取字符串尾部长为len子串的函数*/
{
int i,j;
for(i=0;i<(signed)strlen(ms);ms++);
for(j=0;j<len;j++,ms--);
return ms;
}
❽ 用C++编一个1~1000的同构数
把一个数的平方计算出来,再变成字符串比较字符串的末几位如果一样就说明是同构数。这个方法更直观。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *right(char *ms,int len); /*截取一个字符串尾部长为len个字符的子串*/
void main()
{
long a;
int len;
char as[10];
char ms[20];
printf("求[1,1000]中的同构数:\n");
for(a=1;a<=1000;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<len;j++,ms--);
return ms;
}