大数求余。
最初并没有在意一个数的求余运算。因为“%”就是求余的。而后来在一次比赛的题目上出了一道题就是求余。这是数很大位数可以达到1000位。我一看就蛋疼了。唉,别人都A了这道水题。我却无从下手。
分析此题:把输入的当作字符串读入。再对取出每位减去48得到整型。然后应用同余定理,即可求出。
如果知道这种方法,这题真的很水了。
#include<stdio.h>
#include<string.h>
//本题应用了 (a*b)%c=((a%c)*(b%c))%c ;
int row( int k,int n) //(a+b)%c=(a%c+b%c)%c 对于多个相乘,相加也类似。
{
int f=1,r=1,i;
for(i=0;i<k/6;i++) //降位,每次降六位(因为六位数可以求余)
f*=1000000%n;
for(i=0;i<k%6;i++)
r*=10;
return f*(r%n)%n;
}
int main()
{
char a[1001];
int n,k,k1,c,b;
while(scanf("%s",a)!=EOF)
{
int sum=0;
scanf("%d",&n);
k1=k=strlen(a)-1;
for(int i=0;i<=k;i++)
{
c=(a[i]-48)%n;
b=row(k1--,n);
sum+=(c*b)%n;
}
if(sum%n==0)
printf("YES\n");
else
printf("%d\n",sum%n);
}
return 0;
}
浙公网安备 33010602011771号