結果が最大の置換であるようにintの数字を並べ替える必要があります。これは、簡単に次のように行われます。制限より小さい数字の順列で可能な最大数を見つける
//how to deal with really large ints e.g.int32.MaxValue goes here
// in this case the algorithm would need to round down to the largest possible value
// but still needs to be less than int32.MaxValue
//This code will just handle normal values <int32.MaxValue
public static int Max(int number)
{
var numberAsCharArray = number.ToString().OrderByDescending(c => c).ToArray();
var largestNumberAsString = new string(numberAsCharArray);
return Int32.Parse(largestNumberAsString);
}
しかし、入力がInt32.MaxValue
と同じ桁数を持ち、少なくとも1つの高数字が含まれている場合、この数字は、最初の位置は結果>Int32.MaxValue
を作り、大手に行きますintに変換するときに例外になります。
結果を< = Int32.MaxValue
に制限するにはどうすればよいでしょうか?この制限内でも最大限の順列が可能ですか?
N.B.ネガティブ番号-1234567890
が可能である。 負入力の場合に、-
符号は廃棄されるべきである:-1234567890
は2147398650
出力
何をしようとしますか? – Prajwal
いくつかの例を追加してください。 345の場合の解決策は何ですか?なぜですか?私が「数値そのものよりも小さいintの可能な限り大きな値」を読んだとき、私は '345'(' answer = numberInput - 1')の答えとして '344'を返します。 –
[文字列/整数のすべての並べ替えをリストする]の可能な複製(0120-997-005)。 –