大數取餘數(數組) 今天做學校的oj時遇到一題,問題可見一下截圖: 查遍各大論壇,都沒有遇到合適的方法,普通方法不可用,要採用數組的形式。 被除數超過long long類型,不能採用常規思路,否則會出現wrong answer。值得註意的一點,是不能用double等實數類型,只有整數類型的才可以求餘 ...
大數取餘數(數組)
今天做學校的oj時遇到一題,問題可見一下截圖:
查遍各大論壇,都沒有遇到合適的方法,普通方法不可用,要採用數組的形式。
被除數超過long long類型,不能採用常規思路,否則會出現wrong answer。值得註意的一點,是不能用double等實數類型,只有整數類型的才可以求餘數;
因此可以考慮利用數組運算,可以先定義字元串數組char a[5000],下標多打一些沒有關係,以防萬一,到時候可以用scanf("%s",a)解決。
個人的思路是再定義一個整數數組int b[5000],先把a數組中的每個字元數字轉換成數字。接下去就是小學生做題目了:
前一個數字先乘以10然後再加上後一個數,進行取餘數,餘數再乘以10加上後一個數,以此往複即可。
完整代碼如下:
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 }