判断同构数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;} 展开
 我来答
百度网友3cffda32a1
2018-10-25 · TA获得超过2016个赞
知道大有可为答主
回答量:1860
采纳率:83%
帮助的人:1089万
展开全部

pow函数使用有问题。

Math库里的pow函数的返回类型是一个精度浮点数。

你在isomorphism函数中直接另mod为整型

实际上损失了你后来的pow(10,a)的精度。

就比如说pow(10,2)的返回值是一个99.xxxxxxx的数,然后你直接int了,所以在位数等于2时,你的mod就变成99了。

我们看下面这段代码:

运行结果为两个1,说明的确在你位数等于2的时候,你mod是99而不是100。

所以有一个改进建议就是

if(isomorphism(i,pow(10,a)))

改成

if(isomorphism(i,(pow(10,a)+0.5)))

有疑问请追问叭。

fallx
2018-10-25 · TA获得超过5485个赞
知道大有可为答主
回答量:2321
采纳率:73%
帮助的人:721万
展开全部

整数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;
}
//运行结果:

9376
5
90625
6
109376 890625
7
2890625 7109376
8
12890625 87109376
9
212890625 787109376
追问
主要是输入2的时候输出错误 输出45 55不是25 76
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式