對於一些大數取余,可以利用模擬手算取余的方法進行計算。
e.g.有一個大數989565215785528545587(大數)對10003(小數)取余,需要將該大數從最左端開始對10003取余;
start:
9%10003==9;
(9*10+8)%10003==98;
(98*10+9)%10003==989;
(989*10+5)%10003==9895;
(9895*10+6)%10003==8929;
(8929*10+5)%10003==9271;
......
上一道模板題:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1870

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int main() 5 { 6 int l, ans, i; 7 char a[2000]; 8 while(~scanf("%s", a)) 9 { 10 if(strcmp(a, "0") == 0) break; // 注意這里判斷為零的情況,不能直接a==0 11 l = strlen(a); 12 ans = 0; 13 for(i = 0; i < l; i++) 14 { 15 ans = (ans * 10 + (a[i] - '0')) % 11; // 重點在這里的大數取余算法 16 } 17 if(ans == 0) // 除的盡 18 printf("%s is a multiple of 11.\n", a); 19 else 20 printf("%s is not a multiple of 11.\n", a); 21 } 22 return 0; 23 }