1. 程式人生 > 實用技巧 >試題 演算法訓練 P1103

試題 演算法訓練 P1103

資源限制 時間限制:1.0s 記憶體限制:256.0MB    問題描述
  程式設計實現兩個複數的運算。設有兩個複數 和 ,則他們的運算公式為:

  要求:(1)定義一個結構體型別來描述複數。
  (2)複數之間的加法、減法、乘法和除法分別用不用的函式來實現。
  (3)必須使用結構體指標的方法把函式的計算結果返回。
  說明:使用者輸入:運算子號(+,-,*,/) a b c d.
  輸出:a+bi,輸出時不管a,b是小於0或等於0都按該格式輸出,輸出時a,b都保留兩位。

樣例輸入:
  - 2.5 3.6 1.5 4.9
樣例輸出:
  1.00+-1.30i 這題只要知道複數的運演算法則就好了,當然,我沒有按題目要求來做.
複數運演算法則:
  1. 加法:(a+bi) + (c+di) = (a+c) + (b+d)i;
  2. 減法:(a+bi) - (c+di) = (a-c) + (b-d)i;
  3. 乘法:(a+bi) * (c+di) = (ac-bd) + (bc+ad)i;   4. 除法:(這裡用到分母例項化)   
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <string>
 6 #include <cmath>
 7
#include <algorithm> 8 #define INF 0x3f3f3f3f 9 #define zero 1e-7 10 11 using namespace std; 12 typedef long long ll; 13 const ll mod=50000; 14 const ll max_n=2e5+7; 15 16 int main() { 17 double a, b, c, d, x, y; 18 char ch; 19 cin>>ch>>a>>b>>c>>d; 20 switch
(ch) { 21 case '+': x=a+c; y=b+d; break; 22 case '-': x=a-c; y=b-d; break; 23 case '*': x=a*c-b*d; y=b*c+a*d; break; 24 case '/': x=(a*c+b*d)/(c*c+d*d); y=(b*c-a*d)/(c*c+d*d); break; 25 default : break; 26 } 27 printf("%.2f+%.2fi\n", x, y); 28 return 0; 29 }