大数求余。
最初并没有在意一个数的求余运算。因为“%”就是求余的。而后来在一次比赛的题目上出了一道题就是求余。这是数很大位数可以达到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; }