大數取余(大數模小數)


  對於一些大數取余,可以利用模擬手算取余的方法進行計算。

  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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM