📄 长整数的乘积求余及应用.c
字号:
#include<stdio.h>
#include<math.h>
void clrscr();
long cal(long k,long q,long b,long c)
{long i,mid3,total;
if(k<0){k=-k;q=-q;}
mid3=q*b;
for(i=1;i<=k;i++)
{if(i==1)total=mid3;
else if(fabs(c)-fabs(total)<=fabs(mid3))
if(c<0 && mid3>0 || c>0 && mid3<0)
total=total+c+mid3;
else total=total-c+mid3;
else total+=mid3;
}
return total;
}
void main()
{long a,b,c,q,r,k,mid1,mid2,result;
long cal(long,long,long,long);
clrscr();
printf("请输入任意长整数:a=");
scanf("%ld",&a);
printf("请输入任意长整数:b=");
scanf("%ld",&b);
printf("请输入任意长整数:c=");
scanf("%ld",&c);
if(a==0 || b==0)result=0;
else
{if(fabs(a)>fabs(c))a%=c;
if(fabs(b)>fabs(c))b%=c;
if(fabs(c)/fabs(a)>=fabs(b) || fabs(a)==1 || fabs(b)==1)
result=a*b%c;
else
{q=c/b;k=a/q;r=a%q;
mid1=r*b;
mid2=cal(k,q,b,c);
if(fabs(c)-fabs(mid2)<=fabs(mid1))
{if(c<0 && mid2>2 || c>0 && mid2<0)mid2+=c;
else mid2-=c;
result=mid1+mid2;
}
}
}
printf("\n\n a*b%c所得结果为:%ld",result);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -