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 }
posted @ 2022-03-19 16:23  scannerkk  阅读(122)  评论(0)    收藏  举报