Algorithm 给定n,求最小的m,使n除以m,m只包含4';s后接0';s

Algorithm 给定n,求最小的m,使n除以m,m只包含4';s后接0';s,algorithm,Algorithm,我最近在一次考试中遇到了这个问题。给定一个数n,求最小的数m,使n除以m,m是一个仅由数字4和数字0组成的数。例如,m可以是4440040000444440,但不能是4044404等 我的方法是找到所有这样的数字,直到INT_MAX,将它们存储在一个向量中,然后在遍历向量时,如果n除以v[i],则分别测试每种情况 显然有更好的方法来解决这个问题,因为我的方法只是部分被接受。如有任何建议,将不胜感激 编辑:n可以大到1000。 可以考虑所有的代码 4, 44, 444、4444、……/>代码等等,

我最近在一次考试中遇到了这个问题。给定一个数n,求最小的数m,使n除以m,m是一个仅由数字4和数字0组成的数。例如,m可以是4440040000444440,但不能是4044404等

我的方法是找到所有这样的数字,直到INT_MAX,将它们存储在一个向量中,然后在遍历向量时,如果n除以v[i],则分别测试每种情况

显然有更好的方法来解决这个问题,因为我的方法只是部分被接受。如有任何建议,将不胜感激


<>编辑:n可以大到1000。

可以考虑所有的代码<代码> 4, 44, 444、4444、……/>代码等等,并检查它们是否可以被代码> n< /代码>整除。如果你考虑了<代码> n+1 < /代码>,那么你会发现它们的至少<代码> 2 < /代码>,它们的代码余数与<代码> n< /代码>相同。你可以减去它们(最小的),然后这就是你的答案

假设
n
717

Then at first you consider 4 and  remainder is 4.
Now you consider 44 and remainder is same as (4*10+4).
Now you consider 444 and remainder is (44*10+4) or 444.
Now 4444 and remainder = ((444*10)%717+4)%717= 138+4= 142.
Now 44444 and remainder = ((142*10)%717+4)%717= 707.

很好的解决方案!!我确实忘了提到n可以大到1000。在这种情况下,我们将需要一个数据结构来进行运算,因为长int在这种方法中是不够的。尽管如此,我认为这是他们正在寻找的解决方案。@user2980096.:即使在这种情况下,你也可以这样做。。你不需要形成数字就可以得到它。你只需要做mod运算…(不需要数据结构)。你能详细说明一下吗?例如,在序列中,如果我想找到第n项的模,即4444…(n位)。我不需要这个数字来找到模吗?@user2980096.:我将在我的回答中详细说明