C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で複素数の乗算を実装する方法をわかりやすく解説

問題の概要

複素数を表す2つの文字列が与えられたとします。この文字列を解析(パース)して複素数の乗算を実行し、その結果を再び文字列として返すことを考えましょう。

例えば、入力が「1+-1i」と「1+-1i」である場合、計算結果は「0+-2i」となります。

解決のためのアプローチ

この問題は、以下の手順に従うことで解くことができます。

  • aa := 1つ目の複素数の実部と虚部をペアとして取得する
  • bb := 2つ目の複素数の実部と虚部をペアとして取得する
  • x := aa.real × bb.real − aa.img × bb.img(結果の実部)
  • y := aa.real × bb.img + aa.img × bb.real(結果の虚部)
  • 「x+yi」の形式で文字列として結果を返す

複素数の乗算の数学的背景

複素数の乗算は、次の公式に基づいています。

(a + bi)(c + di) = (ac − bd) + (ad + bc)i

つまり、実部同士の積から虚部同士の積を引いたものが新しい実部となり、実部と虚部を交差させて掛け合わせた和が新しい虚部となります。この性質を利用することで、文字列から取り出した値を使って簡単に計算が行えます。

C++による実装例

それでは、実際の実装を見ていきましょう。まず文字列を解析して実部と虚部に分解し、その後公式に従って乗算を行います。

#include <bits/stdc++.h>
using namespace std;
class Solution {
    public:
    string complexNumberMultiply(string a, string b) {
        pair <int, int> aa = parse(a);
        pair <int, int> bb = parse(b);
        int x = aa.first * bb.first - aa.second * bb.second;
        int y = aa.first * bb.second + aa.second * bb.first;
        return to_string(x) + "+" + to_string(y) + "i";
    }
    pair <int, int> parse(string s){
        pair <int, int> ret;
        int plus = find(s.begin(), s.end(), '+') - s.begin();
        int i = find(s.begin(), s.end(), 'i') - s.begin();
        ret.first = stoi(s.substr(0, plus));
        ret.second = stoi(s.substr(plus + 1, i - plus));
        return ret;
    }
};
main(){
    Solution ob;
    cout << (ob.complexNumberMultiply("1+-1i", "1+-1i"));
}

処理の流れのポイント

parse() 関数では、文字列中の「+」と「i」の位置を検索することで、実部と虚部を切り分けています。stoi() を使って部分文字列を整数に変換し、pair<int, int> として返すシンプルな構造です。

乗算部分では、前述の公式どおりに x(実部)と y(虚部)を計算し、to_string() で文字列に変換した上で「x+yi」の形式に組み立てています。

入力例

"1+-1i"
"1+-1i"

出力例

0+-2i

まとめ

このように、複素数の文字列表現を実部と虚部に分解し、乗算の公式を適用するだけで、C++でも効率的に複素数の乗算を実装できます。文字列処理には標準ライブラリの find()stoi() を活用することで、簡潔で読みやすいコードになります。

  1. C++で複素数の乗算を実行するプログラムの作成方法

    複素数とは、a+bi の形式で表される数のことです。ここで、i は虚数単位、a と b は実数を表します。複素数の例をいくつか挙げます。2+3i 5+9i 4+2i2つの複素数の積は、次の公式で求められます。(x1 + y1i) × (x2 + y2i) = (x1×x2 − y1×y2) + (x1×y2 + y1×x2)iこの公式を用いて、複素数の乗算を実行するC++プログラムは以下の通りです。サンプルコード#include<iostream> using namespace std; int main(){ int x1, y1, x2, y2, x3, y3;

  2. C++のCHAR_BITとは?意味と使い方を解説

    CHAR_BITは、char型が持つビット数を表すマクロです。C++では「limits.h」ヘッダーファイル(C++では<climits>)で宣言されており、一般的な環境では1バイトが8ビットであることを示します。このマクロを利用することで、移植性の高いコードを書くことができます。環境に依存せずにchar型のビット数を取得できるため、ビット演算やデータサイズの計算に役立ちます。CHAR_BITの使用例以下は、C++でCHAR_BITを使用したサンプルコードです。CHAR_BITとsizeofを組み合わせてint型の全ビット数を求め、整数値を2進数形式で出力しています。#includ