给定一个实数,找到你可以添加到它的最低值,以创建一个真正的回文

时间:2015-08-27 19:17:55

标签: algorithm math

给定一个实数n,找到最低实数m,这样n+m就是真正的回文数。

  

例如
  如果数字是101.099,要添加到0,002,我们得到真正的回文101.101。另一个例子是数字13.31,它已经是一个真正的回文并且必须加0才能保持这种状态。最后一个例子是数字100.9,它应该加0.1,使数字变为101。

有人可以提供算法/一些建议来帮助我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

我假设小数与回文数相关。

观察1:您提供的问题相当于找到大于给定值的最小“真实回文”,然后取这个回文和给定数字的差异。

观察2:由于每个实数只有一个小数点,我们知道数字的小数部分必须是整数部分的镜像。因此,给定整数部分,您可以生成唯一可以与之关联的“真实回文”。例如,如果实际回文的整数部分是123,则回文必须 123.321。

这些观察结果应该是您解决问题的坚实起点:)

答案 1 :(得分:1)

该问题没有更低

证明:(假设数字是列表的成员)

数字= [a,b,c,d](忽略小数?)

然后你可以附加列表的反面,你就会有一个pallindrome。

回文数= [a,b,c,d,d,c,b,a]

但请注意,我们在0之间添加d并保持回文。

我们可以添加无限多的0 s,并且我们得到的数字(..00..00000dcba)总是更小,所以没有更小的实数使得数字成为回文。

答案 2 :(得分:0)

如果您正在寻找提示,我建议您先从左到右检查数字。例如,如果您有数字12,那么您只需添加第一个数字以获得121,这是一个回文。

如果你有983,那么看看9.添加9不会使它成为回文,所以看看8.添加89你将得到一个回文98389。

@pankgeorg在OP中,我认为添加000001实际上只是添加1.因此,您无法在解决方案中附加无限多的0来使其变小(000001 = 1)。