输入两个数然后输出这两个数之间的全部同构数,用c语言完成。
思路:将数字及其平方数转换成字符串,再从后往前比较,完全相同就是同构数。
#include <stdio.h>
#include <stdlib.h>
long isIsomorph(long num);//是返回1,否返回0
int main()
{
long n,n1,n2,i;
printf("请输入两个数字:");
scanf("%ld%ld",&n1,&n2);
if(n1>n2)
n=n1,n1=n2,n2=n;
printf("这两个数之间的同构数为(不包含这两个数):\n");
for(i=n1+1;i<n2;i++)//取两数字之间,但不包含这两个数
if(isIsomorph(i))
printf("%ld ",i);
return 0;
}
long isIsomorph(long num)
{
long num2=num*num;
char *p=NULL,*p2=NULL,str1[20],str2[20];
itoa(num,str1,10);
itoa(num2,str2,10);
p=str1;
p2=str2;
while(*p++!=0);
while(*p2++!=0);
p-=2;//指向最后一位数字
p2-=2;
while(p>=str1)
{
if(*p!=*p2)
return 0;
p--;
p2--;
}
return 1;
}
代码资料:
#include "stdio.h"
int main(int argc,char *argv[]){
int a,b,t,n,k;
printf("Enter a & b(int a,b>0)...\n");
if(scanf("%d%d",&a,&b)!=2 || a<1 || b<1 || a>46340 || b>46340){
printf("Input error, exit...\n");
return 0;
}
if(a>b)
a+=b,b=a-b,a-=b;
for(k=0;a<=b;a++){
for(n=1,t=a;t;n*=10,t/=10);
if(a*a%n==a)
printf(++k%10 ? "%8d" : "%8d\n",a);
}
printf("\n");
return 0;
}