判断同构数C语言
求帮忙改一下程序实在是不会了输入5就开始没答案了输入2我这出来的是4555不是2576(不知道是不是编译器问题)--#include<stdio.h>#include<m...
求帮忙改一下程序实在是不会了输入5就开始没答案了 输入2我这出来的是45 55不是25 76(不知道是不是编译器问题)--#include <stdio.h>#include<math.h>int isomorphism(int i,int mod){ if ( i == i*i%mod ) return 1; return 0;}int main(){ int a; unsigned int i; while (scanf("%d",&a) != EOF) { for (i=pow(10,a-1);i<=pow(10,a);i++) { if(isomorphism(i,pow(10,a))==1) printf("%d ",i); } printf("\n"); } return 0;}
展开
2个回答
展开全部
整数int长度不够,把除int a外的所有int 改成long long,最长的,就可以了。
如果long long还不满足需求,可以再写一个大数乘法与求余,实现判断是否同构就好了
//因为5位数平方以后就已经超过了int的最大了。所以,修改数据类型才是正解。
#include <stdio.h>
#include <math.h>
int isomorphism(long long int i,long long int mod){
if ( i== i*i%mod)
return 1 ;
return 0;
}
int main(){
int a;
long long int i;
while (scanf("%d",&a)!=EOF){
for (i=pow(10,a-1);i!=pow(10,a);++i){
if(isomorphism(i,pow(10,a))==1)
printf("%lld ",i);
}
printf("\n");
}
return 0;
}
//运行结果:
4
9376
5
90625
6
109376 890625
7
2890625 7109376
8
12890625 87109376
9
212890625 787109376
追问
主要是输入2的时候输出错误 输出45 55不是25 76
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询