长整数的乘积求余及应用.c

来自「长整数的乘积求余及应用,能使得大整数的乘积变为小程序」· C语言 代码 · 共 49 行

C
49
字号
#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 + =
减小字号Ctrl + -
显示快捷键?