c ++で、与えられた15桁の数字の次の回文を見つけるための最速のロジックは何ですか? たとえば、134567329807541 の次の回文は何になりますか?
質問する
3304 次
5 に答える
16
数を3つの部分に分割します
head
、、、mid
tail
1345673 2 9807541
逆にして、 3765431
head
と比較しますtail
(それらが等しい場合
reverse(head) <= tail
、最初の入力は回文であり、次の入力が必要な場合)- の場合
mid < 9
、midをインクリメントします - それ以外の場合は、パーツをインクリメント
head
して設定しますmid := 0
- の場合
結果:=
head mid reverse(head)
。1345673 3リバース(1345673)=> 134567333765431
于 2009-10-04T10:11:18.637 に答える
3
こんな感じだと思います
- 番号を3つの部分に分割する134567329807541
- 最後のものを裏返します1457089
- 最初の部分よりも大きい場合(この場合)
- firstpart ++
- 中央部=0
- 最初の部分を裏返し、最後の部分を交換します。
于 2009-10-04T09:53:38.067 に答える
1
私は何も実装しようとはしていませんが、ロジックは次のようになると思います。
- 文字列の中央で数字を分割します。Xは左側の部分、Yは右側の部分です。
- reverse(X)<Yの場合、X'= {X+1とします。Xそれ以外の場合}
- 結果はconcat(X'、reverse(X'));です。
長さが不均一な場合は、中央の桁を個別に処理する必要があります。しかし、それは非常に些細なことです。
于 2009-10-04T09:54:03.527 に答える
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)
于 2014-02-01T06:58:39.353 に答える