C#で2つの2進数の積を求める方法をわかりやすく解説
2つの2進数の積(掛け算の結果)を求めるには、まず対象となる2進数を設定します。C#では、2進数をlong型の整数として扱い、筆算と同じ要領で各桁を処理していくことで積を計算できます。
ここでは、2進数「11100」と「10001」の積を求める例を見ていきましょう。
1. 2進数の設定
最初に、掛け合わせる2つの2進数を変数に代入し、コンソールに表示します。
val1 = 11100;
val2 = 10001;
Console.WriteLine("Binary one: "+val1);
Console.WriteLine("Binary two: "+val2);2. ループ処理で積を計算する
次に、whileループを使って2つ目の2進数の各桁を取り出しながら積を求めていきます。桁が「1」の場合は加算処理を行い、「0」の場合は桁をずらすだけです。
while (val2 != 0) {
digit = val2 % 10;
if (digit == 1) {
val1 = val1 * factor;
prod = displayMul(val1, prod);
} else
val1 = val1 * factor;
val2 = val2 / 10;
factor = 10;
}
Console.WriteLine("Product = {0}", prod);3. 加算を行うdisplayMul()メソッド
上記のコードでは、1つ目の2進数を引数としてdisplayMul()メソッドを呼び出しています。このメソッドは、2進数同士の加算を桁ごとに実行し、繰り上がりも考慮した結果を返す役割を担います。
static long displayMul (long val1, long val2) {
long i = 0, rem = 0, mul = 0;
long[] sum = new long[30];
while (val1 != 0 || val2 != 0) {
sum[i++] =(val1 % 10 + val2 % 10 + rem) % 2;
rem =(val1 % 10 + val2 % 10 + rem) / 2;
val1 = val1 / 10;
val2 = val2 / 10;
}
if (rem != 0)
sum[i++] = rem;
i = i-1;;
while (i >= 0)
mul = mul * 10 + sum[i--];
return mul;
}それでは、ここまでの内容をまとめた完全なコードを確認してみましょう。
サンプルコード(完全版)
using System;
class Demo {
public static void Main(string[] args) {
long val1, val2, prod = 0;
long digit, factor = 1;
val1 = 11100;
val2 = 10001;
Console.WriteLine("Binary one: "+val1);
Console.WriteLine("Binary two: "+val2);
while (val2 != 0) {
digit = val2 % 10;
if (digit == 1) {
val1 = val1 * factor;
prod = displayMul(val1, prod);
} else
val1 = val1 * factor;
val2 = val2 / 10;
factor = 10;
}
Console.WriteLine("Product = {0}", prod);
}
static long displayMul (long val1, long val2) {
long i = 0, rem = 0, mul = 0;
long[] sum = new long[30];
while (val1 != 0 || val2 != 0) {
sum[i++] =(val1 % 10 + val2 % 10 + rem) % 2;
rem =(val1 % 10 + val2 % 10 + rem) / 2;
val1 = val1 / 10;
val2 = val2 / 10;
}
if (rem != 0)
sum[i++] = rem;
i = i-1;;
while (i >= 0)
mul = mul * 10 + sum[i--];
return mul;
}
}実行結果
このプログラムを実行すると、以下のように2進数の積が出力されます。
Binary one: 11100 Binary two: 10001 Product = 111011100
このように、各桁の値を取り出しながら2進数の加算を繰り返すことで、C#でも2進数同士の掛け算を簡単に実装できます。仕組みは人間が行う筆算と同じなので、アルゴリズムの理解にも役立ちます。
-
Pythonで3つの数値の中から最大値を求める方法
Pythonで3つの数値の中から最大のものを見つけるには、主に2つの方法があります。1つ目は組み込み関数の max() を使う方法、2つ目は if文による条件分岐で自分で比較する方法です。それぞれのやり方を具体例とともに見ていきましょう。 方法1:max() 関数を使う 最もシンプルな方法は、3つの数値をリストに格納して、組み込み関数の max() を呼び出すことです。 例 my_list = [10, 12, 3] print(max(my_list)) 出力結果 12 さらに、リストを作らずに max() に直接引数として渡すことも可能です。こちらの方がより簡潔に書けます。 print(m
-
Pythonで自然数の合計を求める3つの方法【while文・for文・sum関数】
Pythonでは、自然数の合計を求める方法がいくつかあります。この記事では、whileループ、forループ、そして組み込み関数sum()を使った3つの方法を、具体的なコード例とともにわかりやすく解説します。 方法1:whileループを使う whileループを使用すると、変数iの値を1ずつ増やしながら、その値を累積的に加算していくことができます。以下の例では、最初の10個の自然数(1から10まで)の合計を計算しています。 s,i=0,0 n=10 while i<n: i=i+1 s=s+i print ("sum of first 10 natural num