一道C语言问题 有心人帮忙看下~~~~~~~~

#include<stdio.h>intf(inta,intb,inte){inti,s=1;for(i=1;i<=b;i++){s=(s*a)%e;}returns;}... #include<stdio.h>
int f(int a,int b,int e){
int i,s=1;
for(i=1;i<=b;i++){
s=(s*a)%e;
}
return s;
}
main(){
int a,b,c,d,e,a1,b1,i;
printf("(a^c)*(b^d) mod e\n");
printf("shuru dishu a,b:\n");
scanf("%d%d",&a,&b);
printf("shuru mizhishu c,d:\n");
scanf("%d%d",&c,&d);
printf("shuru moshu e:\n");
scanf("%d",&e);
a1=f(a,c,e);
b1=f(b,d,e);
i=(a1*b1)%e;
printf("yushu wei:%d\n",i);
getch();
}

代码如上 这道程序是想求(a^b)*(c^d) mod e的 输入一些小的数程序还可以正常运行 如(2^2)*(3^3)mod 5=3 但是输入大的数输出的结果就不正确了 如
(286^45)*(4^237)mod 467 得出的结果大于467 请教下这程序出了什么问题~~~~~~~~~~
采用long int型和unsigned long int 也不行 还是会出错 还有程序中的并没有哪一个数会很大 因为我采用的是递归的算法 希望能好好看一下程序~~~~~~~~ 还有(286^45)*(4^237)mod 467 =149 书上的答案~~
展开
 我来答
qwsfws
2010-05-19 · TA获得超过276个赞
知道小有建树答主
回答量:227
采纳率:0%
帮助的人:236万
展开全部
你的那个数据早就走出了int 甚至是long 所能表示的数的范围了,
如286^45=1.4402244274832698636045031051133e+151,要根本解决只能采用高精度数(数组)来描述.
匿名用户
2010-05-19
展开全部
数字太大就会超过int类型能表示的最大值,就会产生错误的结果,尝试改用long int或者unsigned long int
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liy666
2010-05-19
知道答主
回答量:34
采纳率:0%
帮助的人:19.2万
展开全部
看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
悕罕
2010-05-19
知道答主
回答量:24
采纳率:0%
帮助的人:11.5万
展开全部
然后286^45,同学 这是多大的一个数啊 你怎么不用计算机自带的算算?
初步建议 你可以用链表 我觉得用头查法比较简单 然后一个格存一个数

然后,还可以用这个,同余定理(中国剩余定理)来算 这就是数据结构问题了吧
#include"stdio.h"
int f(int a,int b,int e)
{
int i,s=1;
s=a%e;
for(i=1;i<b;i++)
{
s=(s*a)%e;
}
return s;
}
main()
{
int a,b,c,d,e;
int a1,b1;
int i;

printf("(a^c)*(b^d) mod e\n");
printf("shuru dishu a,b:\n");
scanf("%d%d",&a,&b);

printf("shuru mizhishu c,d:\n");
scanf("%d%d",&c,&d);

printf("shuru moshu e:\n");
scanf("%d",&e);

a1=f(a,c,e);
b1=f(b,d,e);
i=(a1*b1)%e;
printf("yushu wei:%d\n",i);
getch();
}
这个就是对的啦 不管多大的数都没问题~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式