我想知道如何查看一个整数包含多少个数字 示例:我有一个 int :1234 现在我想要这些数字,然后分成 4 个整数
1000 200 30 4
我该怎么做呢?
int num = 1234;
var s = num.ToString();
var ints = s.Select((c,i) => (int)(Math.Pow(10,s.Length-i-1)*(c - '0'))).ToArray();
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
请注意,我正在努力不使用提供快速肮脏解决方案的字符串......
您可以使用模 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
使用递归函数
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# 是其中之一)派生的计算机语言都默认提供整数除法。
许多问题(例如这个)都有一个一般情况和一两个特定或特殊情况。这里的特殊情况是您的起始值为零。
在伪代码中,
这将为您提供整数列表......以相反的顺序。
提示:还有另一种称为 a 的数据结构stack
,您可能会发现它对解决这个问题很有用。
如果不写出完整的函数,一个简单的方法是利用以下事实:
1234 % 10 = 4
编写一个循环,通过计算以 10 为模的数字来获取最左边的数字,然后将该数字除以 10(丢弃余数)以将数字“右移”。只要你记下你除以 10 的次数,你就知道你刚刚提取的数字在什么位置。
或者,您可以使用在例如 Int32 类上找到的 ToString() 方法将数字转换为字符串,此时可以通过将某个字符串索引处的数字乘以适当的幂来找到每个数字的数字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;
}