C# 拆分整数

C# 拆分整数,c#,split,int,C#,Split,Int,我已经在网上搜索了一段时间,但还没有找到我要找的东西 让我从一些代码示例开始: int a = 25; int b; int c; 我想在这里做的是,我想拆分a变量,并将这两个值赋给变量b和c。结果将是int b=2和int c=5,反之亦然,我将使用它 如何做到这一点?一种方法是使用以下代码: int input = 123845; var digits = input.ToString().Select(x=>int.Parse(x.ToString())); 这将首先将您的输入

我已经在网上搜索了一段时间,但还没有找到我要找的东西

让我从一些代码示例开始:

int a = 25;

int b;
int c;
我想在这里做的是,我想拆分a变量,并将这两个值赋给变量b和c。结果将是int b=2和int c=5,反之亦然,我将使用它


如何做到这一点?

一种方法是使用以下代码:

int input = 123845;
var digits = input.ToString().Select(x=>int.Parse(x.ToString()));
这将首先将您的输入数字转换为字符串。然后,当传递到Select时,它将该字符串视为字符数组。然后,它将字符转换为字符串,然后将其解析为int,从而生成IEnumerable

值得注意的是,如果您的输入是负数,它将抱怨-,这将不起作用。如果你想的话,一开始就检查一下这个问题并不难

另一种方法是连续除以10,将所有数字一个接一个地取出来

public IEnumerable<int> GetDigits(int input)
{
    int currentNumber = input;
    List<int> digits = new List<int>();
    while (currentNumber !=0)
    {
        digits.Add(currentNumber%10);
        currentNumber = currentNumber/10;
    }
    digits.Reverse();
    return digits;
}
这将循环通过数字,在列表中添加最后一位数字。然后返回颠倒的列表。这是处理负数的,如果输入是负数,那么所有的输出都是负数


一个重要的注意事项是,这两种方法都将处理两位数以上的输入数字。

您可以使用整数除法和模运算:

int b = a / 10;
int c = a % 10;

如果变量a包含较大的数字,则首先确定每个变量中需要多少位数。例如,如果您想要c中的两个数字,您可以在两个操作中使用100作为第二个操作数。

我只看到一个值。。。你可以除以10,把结果放在b里,而c得到余数…大量的反对票有点过头了。这是一个初学者的问题,但“不努力”的抱怨在这里并不适用。有了4个答案,你会期待更多的选票。Doh,写了同样的东西,意识到你已经回答了:+1简单而甜蜜的答案。这就是我想要的答案。谢谢你的帮助。我注意到,如果原始整数是负数,这个解决方案是错误的。@EricLippert:这取决于如果整数是负数,你希望得到什么结果。你不需要做int.Parse。。。因为由于input.ToString,可以保证对于正数,字符串中只有数字字符,所以这个问题对于负数有意义吗?。因此,您可以按如下方式编写.Select:.Selectc=>int c-'0'。嗯,也许不那么可读:@Elgonzo:你完全正确,你可以这样写,但我不喜欢你说的可读性。这可能更有效,但除非你知道诀窍,否则它很可能会难倒你。作为一个评论很好,但我会把它排除在答案之外,因为我假设如果问这个问题,OP在C上不是那么热门。如果a是负数会发生什么?这不是一个真正的问题。请参阅更新@EricLippertUsing.ToString确定以10为基数的数字的位数让我不寒而栗。请仔细阅读什么是对数。
int a = 12345;
a = Math.Abs(a);
int length = a.ToString().Length;
int[] array = new int[length];
for (int i = 0; i < length; i++)
{
    array[i] = a % 10;
    a /= 10;
}