L1-046 整除光棍
涉及知识点:
- 思维、数学
solution:
-
这道题如果你做的话你会发现数据很大,如果直接暴力的话,会炸掉。
-
所以一般这种情况下,都是有技巧的。 这道题你可以得到一个除数就输出一个除数,直到最后余数等于0时结束。
-
比如x=13,令m=1,a作为每次的结果除数,因为当m=1和11除以13除数都是0
-
(可以不要,辣么m就从111开始,则a=111/13=8,然后输出a,此时m也要变)
-
m = 111%13=7;然后让m=7*10+1=71,则a=71/13=5,然后输出a,m=71%13=6
-
(然后让m=6*10+1=61,则a=61/13=4,然后输出a,m=61%13=9;然后让m=9*10+1=91)
-
(则a=91/13=7,然后m=91\%13=0,则跳出循环。)
-
其实这和我们在草稿纸上计算两个数相除 过程是一样的,只不过在计算机中被分解成了一步一步的运算,直到余数为0。
-
(这是我从网上看到的一篇比较好而且较容易理解的思路,所以放到了这里。自己最好在草稿纸纸上演算一下除法过程)
std:
#include <iostream>
using namespace std;
int main()
{
int x,s = 0,n = 0;
cin >> x;
while(x > s){
s = s * 10 + 1;
n ++;
}
while(1){
cout << s / x;
s = s % x;
if(!s)break;
s = s * 10 + 1;
n ++;
}
cout << " " << n << endl;
return 0;
}