任意给定一个正整数N,求一个最小的正整数M(M >1),使得N * M的十进制表示形式里只含有1和0。
最初的解法
看了题目要求之后,我们的第一想法就是从小到大枚举M的取值,然后再计算N * M,最后判断它们的乘积是否只含有1和0。大体的思路可以用下面的伪代码来实现:
for(M = 2; ; M++)
{
product = N * M;
if(HasOnlyOneAndZero(product))
output N, M, Product, and return;
}
但是问题很快就出现了,什么时候应该终止循环呢?这个循环会终止吗?即使能够终止,也许这个循环仍需要耗费太多的时间,比如N = 99时,M = 1 122 334 455 667 789,N * M = 111 111 111 111 111 111。
相关资源:
《编程之美》编辑部 | 《编程之美》豆瓣 | 《编程之美》互动网购买 | 作者Blog
本文探讨了对于给定正整数N,如何找到最小的正整数M(M>1),使得N*M的十进制表示仅包含1和0。介绍了初始解法的局限性,并提出更有效的解决思路。
1256





