C語言:超大數取餘數

大數取餘數(數組)數組

今天作學校的oj時遇到一題,問題可見一下截圖:spa

查遍各大論壇,都沒有遇到合適的方法,普通方法不可用,要採用數組的形式。3d

 

 

 被除數超過long long類型,不能採用常規思路,不然會出現wrong answer。值得注意的一點,是不能用double等實數類型,只有整數類型的才能夠求餘數;code

所以能夠考慮利用數組運算,能夠先定義字符串數組char a[5000],下標多打一些沒有關係,以防萬一,到時候能夠用scanf("%s",a)解決。blog

我的的思路是再定義一個整數數組int b[5000],先把a數組中的每一個字符數字轉換成數字。接下去就是小學生作題目了:字符串

前一個數字先乘以10而後再加上後一個數,進行取餘數,餘數再乘以10加上後一個數,以此往復便可。string

 

 

 

 

 

 

 

 

 

 

 

 

完整代碼以下:io

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     char a[3000];
 6     int k,b[3000];
 7     while(scanf("%s%d",a,&k)!=EOF)
 8     {
 9         int l;
10         l=strlen(a);
11         int i;
12         for(i=0;i<l;i++)
13         {
14             b[i]=a[i]-'0';
15         }
16         for(i=0;i<l;i++)
17         {
18             b[i+1]=(b[i]*10+b[i+1])%k;
19         }
20         printf("%d\n",b[l-1]);
21     }
22     return 0;
23 }
相關文章
相關標籤/搜索