[英]How to format complex number output with negative or zero values
請我編寫一個程序,該程序需要用戶輸入兩個復數並輸出它們的差。 復數是a + bi形式的那些數字,其中a和b是分別稱為實部和虛部的實數。 因此,兩個復數a1 + b1i和a2 + b2i之差為(a1-a2)+(b1-b2)i。 我寫的代碼是
#include<iostream>
using namespace std;
class cmp {
private:
double re, im;
public:
cmp(double a, double b) {re=a; im=b;}
friend cmp operator+(cmp&, cmp&);
void show() {cout<<re<<" + "<<im<<"i"<<endl;}
};
cmp operator+(cmp& p, cmp& q) {return cmp (p.re-q.re, p.im-q.im);}
main() {
double m1, n1, m2, n2;
cout<<"Give two complex numbers: "; cin>>m1>>n1; cout<<endl;
cout<<"Give another two complex numbers: "; cin>>m2>>n2; cout<<endl;
cmp c1(m1,n1);
cmp c2(m2,n2);
cmp c3=c1+c2;
c3.show();
system("PAUSE");
}
但是,當您查看差異(a1-a2)+(b1-b2)i時,如果
b2> b1,則差分中的虛部將為負。 例如(10.5 + 2i)-(5 + 4i)= 5.5-2i。 但是,該程序無法顯示該內容,而是顯示5 + -2i。 我的程序如何采用常規數學格式?
a1 = a2和/或b1 = b2,程序中顯示的0與數學中的常用格式不同。 例如,數學上,(4 + 7i)-(4 + 5i)=(4-4)+(7-5)i = 2i。 但是此程序將顯示0 + 2i。 我也該如何解決這個問題?
請我提供有關如何克服這些困難的線索。 謝謝。
您只需要對這些特殊情況進行show()
方法測試,並進行顯式處理即可。
+
)。 +
。 沒有捷徑可走。 只是在其中放一些if
語句。
(我假設您這樣做是出於教育目的,但如果不是,則應注意, 復數是C ++標准庫的一部分 。)
您可以像這樣重寫show函數
void show() {cout<<"("<<re<<") + ("<<im<<"i"<<")"<<endl;}
(以便顯示括號以使結果清晰可見)
或者你可以這樣
void show()
{
if (re==0 && im>0)
cout<<re<<" + "<<im<<"i"<<endl;
else if (re==0 && im<0)
cout<<re<<" "<<im<<"i"<<endl;
else if(im==0 && re>0)
cout<<re<<" + "<<im<<"i"<<endl;
else if(im==0 && re<0)
cout<<re<<" + "<<im<<"i"<<endl;
else
cout<<re<<" + "<<im<<"i"<<endl;
}
這樣,所有正值將以“ +”號開頭,而負號將始終以“-”號開頭。 祝好運! :)
在C語言中,您可以使用+
標志來強制+或-登錄數字。 對於流,您需要自己處理情況。 使簡單的功能更容易實現:
這是模板版本,可用於實現<運算符和<<運算符的任何東西:
template <typename T>
std::string forceSign(T number){
std::string ret;
std::stringstream helper;
ret=(number<0)?'-':((0<number)?'+':'\0');
helper<<number;
helper>>ret;
return ret
}
然后,您可以使用:
void show() {cout<<re<<" "<<forceSign(im)<<"i"<<endl;}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.