大数取余(大数模小数)
对于一些大数取余,可以利用模拟手算取余的方法进行计算。
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 }