一道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 书上的答案~~ 展开
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 书上的答案~~ 展开
2010-05-19
展开全部
数字太大就会超过int类型能表示的最大值,就会产生错误的结果,尝试改用long int或者unsigned long int
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
然后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();
}
这个就是对的啦 不管多大的数都没问题~
初步建议 你可以用链表 我觉得用头查法比较简单 然后一个格存一个数
然后,还可以用这个,同余定理(中国剩余定理)来算 这就是数据结构问题了吧
#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();
}
这个就是对的啦 不管多大的数都没问题~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询