整数に含まれる数値の数を確認する方法を知りたい
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 modulo 10は 3 に評価されます。
C プログラミング言語から派生したほとんどのコンピューター言語 (C# はその 1 つです) は、オペランドが整数型の場合、デフォルトとして整数除算を提供します。
多くの問題 (このような) には、一般的なケースと、1 つまたは 2 つの特定または特殊なケースがあります。ここでの特別なケースは、開始値がゼロの場合です。
擬似コードでは、
これにより、整数のリストが得られます...逆順です。
ヒント: a と呼ばれる別のデータ構造がありstack
、この問題を解決するのに役立つかもしれません。
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;
}
完全な関数を書き出すことなく、次の事実を利用するのが簡単な方法です。
1234 % 10 = 4
数値を法 10 で計算して左端の桁を取得し、その数値を 10 で割り (剰余を破棄)、数値を右に「シフト」するループを作成します。10 で割った回数を追跡している限り、抽出した数字がどの位置にあったかがわかります。
または、たとえば Int32 クラスにある ToString() メソッドを使用して数値を文字列に変換することもできます。この時点で、文字列インデックスの数字に適切なべき乗を掛けることで、各桁の数値を見つけることができます。 10.