这是我的代码,但是速度慢,任何方式都可以更快地完成..我正在打的数字范围是123456789但我不能低于15秒,我需要它低于5秒..
long num = 0;
for (long i = 0; i <= n; i++)
{
num = num + GetSumOfDigits(i);
}
static long GetSumOfDigits(long n)
{
long num2 = 0;
long num3 = n;
long r = 0;
while (num3 != 0)
{
r = num3 % 10;
num3 = num3 / 10;
num2 = num2 + r;
}
return num2;
}
Run Code Online (Sandbox Code Playgroud)
sum =(n(n+1))/2 没有给我我需要的结果,没有正确计算..
对于N = 12,总和是1 + 2 + 3 + 4 + 5 + 6 + 7 …
例:
a ="56 65 74 100 99 68 86 180 90",按数字重量排序变为:"100 180 90 56 65 74 68 86 99"
当两个数字具有相同的"权重"时,让我们将它们分类为字符串而不是数字:100表示180之前,因为它的"权重"(1)小于180(9)的180和90之前的权重因为,具有相同的"重量"(9)它之前作为一个字符串.
列表中的所有数字都是正数,列表可以为空.
我的测试:
[TestMethod]
public void Test1()
{
Assert.AreEqual("2000 103 123 4444 99", WeightSort.orderWeight("103 123 4444 99 2000"));
}
[TestMethod]
public void Test2()
{
Assert.AreEqual("11 11 2000 10003 22 123 1234000 44444444 9999", WeightSort.orderWeight("2000 10003 1234000 44444444 9999 11 11 22 123"));
}
Run Code Online (Sandbox Code Playgroud)
我的班级来计算权重的顺序:
public class WeightSort
{
public static string orderWeight(string strng)
{
List<int> list = strng.Split(' ').Select(Int32.Parse).OrderBy(i => i).ToList(); …Run Code Online (Sandbox Code Playgroud)