PAT-B 1051 複數乘法
PAT-B 1051 複數乘法
https://pintia.cn/problem-sets/994805260223102976/problems/994805274496319488
題目
複數可以寫成 (A+Bi) 的常規形式,其中 A 是實部,B 是虛部,i 是虛數單位,滿足 i2=−1;也可以寫成極座標下的指數形式 (R×e^(Pi)),其中 R 是複數模,P 是輻角,i 是虛數單位,其等價於三角形式 (R(cos(P)+isin(P))。現給定兩個複數的 R 和 P,要求輸出兩數乘積的常規形式。
輸入
輸入在一行中依次給出兩個複數的 R1, P1, R2, P2,數字間以空格分隔。
輸出
在一行中按照 A+Bi
的格式輸出兩數乘積的常規形式,實部和虛部均保留 2 位小數。注意:如果 B
是負數,則應該寫成 A-|B|i
的形式。
樣例輸入
2.3 3.5 5.2 0.4
樣例輸出
-8.68-8.23i
分析
問題比較簡單,但是有一個坑需要注意,由於實部、虛部都要保留兩位小數,那麼大家想想如果A的值在(-0.005,0)區間內時,應該輸出什麼,負數的四捨五入和正數的四捨五入的效果恰好反過來了,負數舍了變大了,入了卻變小了,比如x=-0.005,四捨五入一下x=-0.01,入後變小了。如果A在(-0.005,0)之間那麼A捨去後等於0.00,然而計算機的輸出是什麼呢?
輸出是-0.00,問題就出在負號上,我們需要把負號去掉,只輸出0.00。
C++程式
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double r1,p1,r2,p2;
scanf("%lf%lf%lf%lf",&r1,&p1,&r2,&p2);
double a=r1*cos(p1),b=r1*sin(p1),c=r2*cos(p2),d=r2*sin(p2);
double A=a*c-b*d,B=a*d+b*c;//(a+bi)*(c+di)=(ac-bd)+(ad+bc)i
if(-0.005<A&&A<0) A=0;//防止輸出-0.00的情況
if(-0.005<B&&B<0) B=0;
printf("%.2lf",A);
if(B>=0) putchar('+');
printf("%.2lfi\n",B);
return 0;
}
相關文章
- 1051 複數乘法
- 大數加法乘法
- 大整數乘法
- PAT-B 1013 數素數 【素數】
- PAT-B 1064 朋友數
- PAT-B 1007 素數對猜想【素數】
- 高精度整數的乘法
- PAT-B 1023 組個最小數
- PAT-B 1048 數字加密【字串】加密字串
- PAT-B 1062 最簡分數
- PAT-B 1091 N-自守數
- CF1051F題解
- DreamJudge-1051-日期計算
- 【PAT A1051】【棧/模擬】
- python 99乘法表,佔位基礎複習Python
- 04 矩陣乘法與線性變換複合矩陣
- PAT-B 1057 數零壹【進位制】
- PAT-B 1060 愛丁頓數【排序】排序
- 遞迴與分治之大整數乘法遞迴
- PAT-B 1030 完美數列【二分】
- PAT-B 1084 外觀數列 【模擬】
- L1-080 乘法口訣數列
- 斐波那契數列Ⅳ【矩陣乘法】矩陣
- L1-080 乘法口訣數列 分數 20
- PAT-B 1079 延遲的迴文數【字串+大數加法】字串
- PAT-B 1019 數字黑洞【陣列+模擬】陣列
- PAT-B 1017 A除以B【模擬 大數除法】
- PAT-B 1049 數列的片段和【規律】
- PAT-B 1056 組合數的和【規律】
- PAT-B 1021 個位數統計【對映】
- 大數運算—大數加法、減法、乘法、除法詳解
- PAT-B 1024 科學計數法【模擬+字串】字串
- PAT-B 1012 數字分類【簡單模擬】
- PAT-B 1002 寫出這個數 【字串+遞迴列印】字串遞迴
- PAT-B 1006 換個格式輸出整數【遞迴列印】遞迴
- 矩陣乘法矩陣
- 高精度乘法
- 乘法逆元 模板