使数的最大数

问题描述

我尝试使输入的数字最大。有一些想法,但都以错误告终。

int n = 123 // in the end shell be 321,567 -> 765,184 -> 841
StringBuilder str = new StringBuilder(n.ToString());
            int[] aray = new int[3];
            for (int i = 0;i < str.Length;i++) {
                aray[i] = int.Parse(str[i].ToString());
            }
            aray.OrderBy(x => x);
            var a = aray.Join(' '); //eror
            Console.WriteLine(a);

解决方法

好吧,我们有两种情况:正数负数

n =  43125 ->  54321
n = -43125 -> -12345

我们可以在 Linq 的帮助下处理这两种情况:

using System.Linq:

...

string result = string.Concat(n < 0  
  ? n.ToString().OrderBy(c => c)
  : n.ToString().OrderByDescending(c => c));

这里我们利用了 '-' < '0' 的事实,并且在负数的情况下我们不必为 - 做任何特殊的工作。如果你想获得int值,只需添加int.Parse

int result = int.Parse(string.Concat(n < 0  
  ? n.ToString().OrderBy(c => c)
  : n.ToString().OrderByDescending(c => c)));

但要小心:大n会导致整数溢出

n = 1234567890 -> 9876543210 > int.MaxValue
,

你有很多代码来完成一些非常简单的事情:

var ans = int.Parse(String.Concat(n.ToString().OrderByDescending(dc => dc)));