大数取余(大数模小数)

  对于一些大数取余,可以利用模拟手算取余的方法进行计算。

  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 }
View Code

 

posted @ 2019-08-16 23:40  swsyya  阅读(1484)  评论(0编辑  收藏  举报

回到顶部