1. 用c语言写一个程序。要求: 求任意范围内的同构数有哪些。并输出他们。如果没有,输出no。
#include<stdio.h>
intmain()
{
inti,j,m,n,temp;
intflag=false;
j=10;
printf("输入开始点:");
scanf("%d",&m);
printf("输入结束点:");
scanf("%d",&n);
if(m>n)//如果开始点大于结束点则交换
{
temp=m;
m=n;
n=temp;
}
for(i=m;i<=n;i++)
{
if(i==j)
j*=10;
if((i*i)%j==i)
{
printf("%d",i*i);
flag=true;
}
}
if(!flag)
printf("no ");
else
printf(" ");
return0;
}
2. 同构数——c语言
pow函数使用有问题。
Math库里的pow函数的返回类型是一个精度浮点数。
你在isomorphism函数中直接另mod为整型
实际上损失了你后来的pow(10,a)的精度。
就比如说pow(10,2)的返回值是一个99.xxxxxxx的数,然后你直接int了,所以在位数等于2时,你的mod就变成99了。
我们看下面这段代码:
有疑问请追问叭。
3. C语言求100以内同构数
#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,100]中的同构数:\n");
for(a=1;a<=100;a++)
{
ultoa(a,as,10);
len=strlen(as);
ultoa(a*a,ms,10);
if(strcmp(as,right(ms,len==0) printf("%s 其平方为 %s\n",as,ms); }
}
char *right(char *ms,int len)
{
int i,j;
for(i=0;i<(signed)strlen(ms);ms++);
for(j=0;j<len;j++,ms--);
return ms;
}
欢迎插旗~
4. C语言 编写同构数
//---------------------------------------------------------------------------
#include
<stdio.h>
int
main(void)
{
int
i;
for
(i=1;
i<100;
i++)
if
(i==(i*i)%(i<10?10:100))
printf("%d
",i);
return
0;
}
//---------------------------------------------------------------------------
5. 用c语言求同构数
找出1至10000之间的全部同构数的C语言程序
例如:5是25右边的数,25是625右边的数,5和25都是同构数数*/
#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);
}
}
6. c语言编一个程序,求2~999之间所有的同构数
程序如下:
#include<stdio.h>
void main()
{
int i,square;
for(i=2;i<10;i++)/*求一位数的同构数*/
{square=i*i;
if(square%10==i)
printf("%d ",i);
}
for(i=10;i<100;i++)/*求两位数的同构数*/
{
square=i*i;
if(square%100==i)
printf("%d ",i);
}
for(i=100;i<1000;i++)/*求三位数的同构数*/
{
square=i*i;
if(square%1000==i)
printf("%d ",i);
}
7. C语言问题---同构数
#include <stdio.h>
#include <conio.h>
int main(void)
{
int a,b,result[100],i,j,l;
int k=0;
printf("please input two number(0-99)");
scanf("%d%d",&a,&b);
for(i=b*b;i>=a;i--)
{
for(j=a;j<=b;j++)
{
if(i==j*j &&(j==(i%10)||j==(i%100)))
{
result[k]= j;
k++ ;
}
}
}
printf("the result is:\n");
for(l=k-1;l>=0;l--)
printf("%d\n",result[l]);
getch();
return 0;
}
8. c语言:编写函数判断x是否同构数
#include
inttgs(intx)
{
intm1,n,a,b;
m1=x;
n=x*m1;
while(m1)
{
a=m1%10;
b=n%10;
if(a!=b)break;
m1=m1/10;
n=n/10;
}
returnm1==0;
}
intmain()
{
intx;
scanf("%d", &x);
if(tgs(x))printf("%d是一个同构数",x);
elseprintf("%d不是一个同构数",x);
return0;
}。
(8)编写一个c语言求出同构数扩展阅读
C语言 同构数的算法
“同构数”是指这样的整数:它恰好出现在其平方数的右端。
如:376*376=141376。请输出10000以内的全部“同构数”。
算法分析:
1.求出1-10000之间每个数的位数(即这个数是几位数)。设这个数是i.//用for循环实现。
2.再求出每个数的平方值,提取出最右端对应位数的数值出来。//用取模%法实现。
如369是个三个数,它的平方是136161,用取模%法提取出最右三位数字161,即136161%1000=161。
3.最后判断 i 与右端数 是否相等,相等即为同构数。
9. C语言编程100以内所有的同构数
#include<iostream.h>
#include<iomanip.h>
int main ()
{
int i,j,m,n,x,y,z,k,a;
for(i=1;i<=9;i++)//判断1-9之间同构数
{
m=i*i;
n=m-i;
if(n%10==0)
cout<<setw(4)<<i;
}
for(j=10;j<=99;j++)//判断10-99之间同构数
{
x=j*j;
y=x-j;
z=y/10;
if((y%10==0)&&(z%10==0))
cout<<setw(4)<<j;
}
for(k=100;k<=100;k++)//判断100是否为同构数
{
x=j*j;
y=x-j;
z=y/10;
a=y/100;
if((y%10==0)&&(z%10==0)&&(a%10==0))
cout<<setw(4)<<k;
}
cout<<endl;
return 0;
}
这个算法麻烦点,比较直观!