我想知道如何查看一个整数包含多少个数字示例:我有一个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);
首先,编写一个清晰的问题语句。然后将其分解为一系列更简单的问题。你需要
- 将整数分解为其组成部分的十进制数字
- 按照正确的顺序将其中的每一个累加到一个数组中
几个提示:
-
对于任何整数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;
}