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 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}