亲爱的您既然来看这道题的题解,那么您很有可能落入了一个题目的陷阱,在这里,我建议亲再仔仔细细的回去读一下题目呢,也好给自己留一个深刻的教训。
这是题链接,
注意到题面
如果结果的实部或者虚部为0,则不输出。如果结果为0,则输出0.0。注意一个词,结果!也就是打印时,等号左边和右边不是一个规则:
对于结果,实部或者虚部为0,则不输出;然而,对于算式也就是等式右边,实部或者虚部为0,则 还 是 需 要 进 行 输 出
哈哈哈😆😆555😭😭~
深刻的反思
由于我过早的考虑代码复用,就把等式左右两边打印复数用了同一套规则,结果一时错,一时爽;一直错,一直爽…被折磨了两小时。
一开始打印部分我是这样写的:
void printExp(double a, double b, bool flag)
{
if(abs(a) < 0.05 && abs(b) < 0.05)
{
printf("0.0");
}
else
{
if(flag)
printf("(");
// 实部
if(abs(a) >= 0.05)
{
printf("%.1lf", a);
}
// 虚部
if(abs(b) >= 0.05)
{
// 虚部的 + 符号
if(b > 0 && abs(a) >= 0.05)
printf("+");
printf("%.1lfi", b);
}
if(flag)
printf(")");
}
}
void printExpTotal(double a1, double b1, double a2, double b2, char x)
{
printExp(a1, b1, 1);
printf(" %c ", x);
printExp(a2, b2, 1);
printf(" = ");
}
后来我是这样写的:
void printExp(double a, double b)
{
if(abs(a) < 0.05 && abs(b) < 0.05)
{
printf("0.0");
}
else
{
// 实部
if(abs(a) >= 0.05)
{
printf("%.1lf", a);
}
// 虚部
if(abs(b) >= 0.05)
{
// 虚部的 + 符号
if(b > 0 && abs(a) >= 0.05)
printf("+");
printf("%.1lfi", b);
}
}
}
void printExpTotal(double a1, double b1, double a2, double b2, char x)
{
printf("(%.1lf", a1);
if(b1 >= 0)
printf("+");
printf("%.1lfi)", b1);
printf(" %c ", x);
printf("(%.1lf", a2);
if(b2 >= 0)
printf("+");
printf("%.1lfi)", b2);
printf(" = ");
}
果断捧回AC
完整代码见我的Github
过早优化是万恶之源,不看清、想清题目要求就想着优化则是万恶源之源!