C#如何检查一个Integer包含多少个数字并将它们分开



我想知道如何查看一个整数包含多少个数字示例:我有一个int:1234现在我想要这些数字回来,但随后分离成4个整数

1000200304

我该怎么做?

int num = 1234;
var s = num.ToString();
var ints = s.Select((c,i) => (int)(Math.Pow(10,s.Length-i-1)*(c - '0'))).ToArray();

您可以使用模10得到最低部分,然后从数字中减去它,然后使用模100得到下一个,依此类推:

int number = 1234;
for (int div = 10; number != 0; div *= 10) {
  int n = number % div;
  Console.WriteLine(n);
  number -= n;
}

输出:

4
30
200
1000
int number = 1234;
int remainder = number;
int maxPow = (int)Math.Log(number, 10);
for (int factor = (int)Math.Pow(10, maxPow); factor >= 1; factor /= 10)
{
    int part = factor * (remainder / factor);
    remainder -= part;
    Console.WriteLine(part);
}

构建集合:

private static IEnumerable<int> GetParts(int number)
{
    int remainder = number;
    int maxPow = (int)Math.Log(number, 10);
    for (int factor = (int)Math.Pow(10, maxPow); factor >= 1; factor /= 10)
    {
        int part = factor * (remainder / factor);
        remainder -= part;
        yield return part;
    }
}
Which can be used the following way:
List<int> parts = GetParts(1234).ToList();
// parts[1] --> 200

请注意,我很难不使用字符串,因为它提供了快速而肮脏的解决方案。。。

使用递归函数

 public List<int> myNums = new List<int>();
 public void getList(int Num, int Multiplier)
 {
     if (Num != 0)
     {
         myNums.Add((Num % 10)*Multiplier);
         getList(Num / 10,Multiplier* 10);
     }
 }

//呼叫

int N = 1234;
getList(N, 1);

首先,编写一个清晰的问题语句。然后将其分解为一系列更简单的问题。你需要

  1. 将整数分解为其组成部分的十进制数字
  2. 按照正确的顺序将其中的每一个累加到一个数组中

几个提示:

  • 对于任何整数x,您可以通过模10运算获得1位置的数字值123模10计算为3。

  • 大多数源自C编程语言的计算机语言(C#就是其中之一(在操作数为整数类型时提供整数除法作为默认值。

  • 许多问题(如此(都有一个一般情况和一两个特定或特殊情况。这里的特殊情况是当起始值为零时。

在伪代码中,

  • 如果X为零,则返回列表[0]
  • 否则。。。
    • 创建一个名为Digits的空整数列表
    • 而X为非零
    • D是X的模10
    • X是X除以10
    • 将D附加到数字

这会给你一个整数列表。。。以相反的顺序。

提示:还有另一种称为stack的数据结构,您可能会发现它对解决此问题很有用。

如果不写出完整的函数,一个简单的方法就是利用以下事实:

1234%10=4

写一个循环,通过计算取10为模的数字来获取最左边的数字,然后将数字除以10(去掉余数(,将数字向右"移位"。只要你记录下你被10整除的次数,你就知道你刚刚提取的数字在哪个位置

或者,您可以使用上的ToString((方法,例如Int32类,将数字转换为字符串,此时可以通过将某个字符串索引处的数字乘以10的适当幂来找到每个数字的数字。

    public static List<int> DecomposeInPowerOf10(int number)
    {
        if (number < 0) return null;
        if (number < 10) return new List<int> {number};
        List<int> result = new List<int>();
        char[] digits = number.ToString(CultureInfo.InvariantCulture).ToArray();
        for (int i = 0; i < digits.Length; i++)
        {
            int digit = digits[i] - '0';
            int value = digit * (int)(Math.Pow(10, (digits.Length - i - 1)));
            result.Add(value);
        }
        return result;
    }

相关内容

最新更新