藍橋杯 演算法提高 ADV-120 6-17複數四則運算
阿新 • • 發佈:2019-01-05
演算法提高 6-17複數四則運算
時間限制:1.0s 記憶體限制:512.0MB
設計複數庫,實現基本的複數加減乘除運算。
輸入時只需分別鍵入實部和虛部,以空格分割,兩個複數之間用運算子分隔;輸出時按a+bi的格式在螢幕上列印結果。參加樣例輸入和樣例輸出。
注意考慮特殊情況,無法計算時輸出字串"error"。
樣例輸入
2 4 * -3 2
樣例輸出
-14-8i
樣例輸入
3 -2 + -1 3
樣例輸出
2+1i
分析:複數的四則運算公式見註釋,程式碼如下:
PS:剛開始在輸出error的位置我return了-1,代表是錯誤,結果提交上去老是執行錯誤。後來猜測是藍橋判斷了main的返回值,必須為0才不會執行錯誤,改為return 0之後果然正確了。(~ ̄▽ ̄)~
特此提醒一下那些和我一樣習慣出錯就return -1的小夥伴,注意一下哈~
#include <iostream> using namespace std; //複數類 struct fushu { //a+bi; double a; double b; }; //複數的加法運算:(a+bi)+(c+di) = (a+c)+(b+d)i fushu *add(fushu *y1, fushu *y2) { fushu *temp = new fushu; temp->a = y1->a + y2->a; temp->b = y1->b + y2->b; return temp; } //複數的減法運算:(a+bi)-(c+di) = (a-c)+(b-d)i fushu *jian(fushu *y1, fushu *y2) { fushu *temp = new fushu; temp->a = y1->a - y2->a; temp->b = y1->b - y2->b; return temp; } //複數的乘法運算:(a+bi)*(c+di) = (ac-bd) + (ad-bc)i fushu *cheng(fushu *y1, fushu *y2) { fushu *temp = new fushu; temp->a = y1->a * y2->a - y1->b * y2->b; temp->b = y1->a * y2->b + y1->b * y2->a; return temp; } //複數的除法運算:(a+bi)/(c+di) = (ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i fushu *chu(fushu *y1, fushu *y2) { fushu *temp = new fushu; //注意分母不能為0 if(y2->a == 0 && y2->b == 0) { return NULL; } temp->a = (y1->a * y2->a + y1->b * y2->b)/(y2->a * y2->a + y2->b * y2->b); temp->b = (y1->b * y2->a - y1->a * y2->b)/(y2->a * y2->a + y2->b * y2->b); return temp; } int main() { fushu *y1 = new fushu; fushu *y2 = new fushu; fushu *result; char ch; cin >> y1->a >> y1->b >> ch >> y2->a >> y2->b; switch(ch) { case '+': result = add(y1, y2); break; case '-': result = jian(y1, y2); break; case '*': result = cheng(y1, y2); break; case '/': result = chu(y1, y2); break; default: result = NULL; } if(!result) //如果result == NULL,則報錯 { cout << "error"; return 0; } cout << result->a; if(result->b > 0) cout << "+"; //如果是正數,則前面補‘+’號,負數自帶‘-’號 cout << result->b << "i"; return 0; }