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;
}