int * turntot(int m);
int count=0;
int main()
{
unsigned long a;
int b,m,n,i;
int * p;
scanf("%ld,%d,%d",&a,&m,&n);
p=turntot(m);
b=a;
a=1;
for(i=0;i<count-1;i++,p++)
{
if(*p==1||*p==0)
{
if(*p==1)
{
—————————————————————————如 printf("%d",*p);
a=(a*b)%n;
a=(a*a)%n;
————————————————————————— 如 printf("%ld",a);
}
else
{
——————————————————
a=(a*a)%n;
}
}
}
if(*p==1)
{
————————————————
a=a*b;
}
else
{
——————————————————
a=a;
}
printf("%ld\n",a%n);
}
int * turntot(int m)
{
int a[10],b[10];
int i=0,j=0,temp;
do
{
temp=m/2;
b[i]=m%2;
m=temp;
count++;
i++;
}while(temp>0);
for(i=count-1;i>=0;i--,j++)
a[j]=b[i];
return a;
}
题目是计算a的m次方mod n a,m,n均小于1000
这是我自己写的,运行正确。但是题目要求要输出每一步过程中的结果,所以我就在代码中直线部分添加了printf 用来显示每一步的值。但只要在直线部分一加printf,运行结果就不正确....不知道问题出在哪。
另外一个小问题就是,如果a mn取值过大 但不超过一千 貌似数值会溢出 想用LONG LONG 数据类型,但我的C版本不支持, 有啥好的解决方法吗
4 个解决方案
#1
什么?不支持long long
#2
就是一种数据类型啊 呵呵 重点其实也不再那啦
#3
可以用字符串来存储运算结果
#4
因为你用的是c语言所以你在使用printf后,还要给a赋值编译肯定出问题 ,你可以在写个试试
#1
什么?不支持long long
#2
就是一种数据类型啊 呵呵 重点其实也不再那啦
#3
可以用字符串来存储运算结果
#4
因为你用的是c语言所以你在使用printf后,还要给a赋值编译肯定出问题 ,你可以在写个试试