将int数组合并为一个int

时间:2018-07-05 19:44:13

标签: c# int

我想将一个整数数组组合为一个整数值。因此,我有以下代码将数组组合为单个值。

int[] array = { 5, 6, 2, 4 };
int combine = 0;

for (int i = 0; i < array.Length; i++)
{
    combine += array[i] * Convert.ToInt32(Math.Pow(10, array.Length-i-1));
}

该产量合计=5624。这是正确的。

我的问题是我的数组不是0-9的形式。所以我的数组可能是{51,62,23,44}

int[] array = { 51, 62, 23, 44 };
int combine = 0;

for (int i = 0; i < array.Length; i++)
{
    combine += array[i] * Convert.ToInt32(Math.Pow(10, array.Length-i-1));
}

收益合并为574774,而不是51622344。我该如何纠正?

4 个答案:

答案 0 :(得分:6)

执行以下操作:

var number = int.Parse(string.Join("", array));

说明:

string.Join将采用T类型的任何枚举,在每个成员上调用ToString()并将它们连接到具有指定分隔符的单个字符串中。

一旦您有一个代表您的电话号码的字符串,您只需对其进行语法分析即可获得电话号码本身。

这当然是不安全的,并且取决于您的可能输入,这可能会失败:{1, 4, -5, 4 }。某些错误检测和int.TryParse可能是解决此问题的最佳方法,示例只是为了使想法更清晰。

答案 1 :(得分:4)

为什么不将它们转换为字符串然后进行连接?

using System;

public class Program
{
    public static void Main()
    {
        int[] intArray = { 5, 6, 2, 4 };
        var result = string.Concat(intArray);

        Console.WriteLine(result);

        try {
            int resultNumber = int.Parse(result);
        }
        catch(OverflowException) {
            // this can occur if you exceed the maximum value of an int
            long resultBigNumber = long.Parse(result);
        }
    }
}

答案 2 :(得分:0)

Linq和一些简单的数学方法可以帮助您(没有字符串或Math.Pow)。我还将使用幅度变化很大的数字作为种子的种子(即,不是所有的一位数字或所有的两位数字)。首先是一些初步代码:

  private readonly int[] PowersOf10 = new [] {10, 100, 1000, 10000, 100000};
  private int DecimalShiftAccumulate(int numToShift, int numToAdd)
  {
      var nextPowerOf10 = PowersOf10.First(x => x > numToAdd);
      return (numToShift * nextPowerOf10) + numToAdd;
  }

您可以在PowersOf10数组中包含更多数字;我厌倦了数零。

然后声明您的int数组并计算结果:

 var intArray = new[] { 1051, 7, 923, 44 };
 var arrayResult = intArray.Aggregate((a, b) => DecimalShiftAccumulate(a, b));

我得到arrayesult = 1051792344(即(使用&作为串联)1051&7&923&44)

答案 3 :(得分:0)

尝试使用StringBuilder,如下所示:

using System;
using System.Text;
public class Program {
       public static void Main(string[] args) {
             StringBuilder sb = new StringBuilder();
             int[] array = new Int[] { 51, 62, 23, 44 };
             int combine = 0;
             foreach(int single in array) {
                    string oneNum = single.ToString();
                    sb.Append(oneNum);
             }
             string final = sb.ToString();
             combine = Convert.ToInt32(final);
       }
}

这会将数组中的数字转换为字符串,然后将其转换为数字。