在c ++中,找到给定15位数的下一个回文的最快逻辑是什么?例如下一个回文:134567329807541?
答案 0 :(得分:16)
将数字分为三部分,head
,mid
,tail
1345673 2 9807541
反向head
并将其与tail
进行比较
3765431
如果reverse(head) <= tail
(如果它们相等,则初始输入是回文,你想要下一个)
mid < 9
,则递增中间head
部分并设置mid := 0
结果:= head mid reverse(head)
。
1345673 3 reverse(1345673)=&gt; 134567333765431
答案 1 :(得分:3)
我相信就像这样
答案 2 :(得分:1)
我不打算实施任何东西,但我认为逻辑将是:
如果长度不均匀,则需要分别处理中间数字。但这非常简单。
答案 3 :(得分:0)
我认为以下算法也应该有效.. 它也更容易实现
i) Divide the given nos into three parts HEAD MID TAIL
ii) Add 1 to number HEAD MID
(in case of carry, follow basic addition rules)
iii) reverse the new HEAD(store it in HEAD_REV)
iv) required ans is:- 'new HEAD' MID HEAD_REV
希望以下示例有助于更好地理解算法
不允许: - 23469 9 12367
So HEAD -> 23469 MID -> 9 TAIL --> 12367
step 2:- 23469 9 +1 = 23470 0
(now HEAD -> 23470 MID -> 0 HEAD_REV -> 07432 )
必填答案: -
23470 0 07432
答案 4 :(得分:0)
Split the number into three parts head, mid and tail
if reverse(head)>tail
result := head mid reverse(head)
else if reverse(head)= tail && mid<9
mid++
result := head mid tail
else
mid =0
head++
result := head mid reverse(head)