1. 程式人生 > 其它 >PTA整除光棍

PTA整除光棍

一、題目描述

 

 二、解題思路

  這裡我們直接列舉1的個數,然後看看是否能夠整除,就是個大數除法的內容。這裡注意中間可能有為0的情況,列如530 / 5 = 106中間這個0要注意。

  這裡大數除法是這樣進行的。

  比如說123  / 5

  第一次1 / 5為0,那麼第一個就為0,餘數為1

  第二次利用上次的餘數*10 + 當前的數值2 對5求餘 的 2

  第三次也同上(2 * 10 + 3)% 5 = 3

 

  和直接對123 % 5 == 3一樣的結果。

三、程式碼實現

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int
len = 0; 4 int num[10010]; 5 int dnum[10010]; 6 int dlen = 0; 7 int x; 8 bool solve() 9 { 10 int yu,chu; 11 yu = chu = 0; 12 dlen = 0; 13 for(int i = 0;i < len;i++){ 14 chu = chu * 10 + num[i]; 15 yu = (yu * 10 + num[i]) % x; 16 if(chu >= x){ 17 dnum[dlen++] = chu / x;
18 chu = chu % x; 19 } 20 else { 21 dnum[dlen++] = 0; 22 } 23 } 24 return !yu; 25 } 26 int main() 27 { 28 cin >> x; 29 bool ok =false; 30 while(1){ 31 num[len++] = 1; 32 if(solve()) 33 ok = true; 34 if
(ok) 35 break; 36 } 37 int i = 0; 38 while(i < dlen && dnum[i] == 0) 39 i++; 40 for(;i < dlen;i++) 41 cout << dnum[i]; 42 cout << ' ' << len << endl; 43 return 0; 44 }