1051. 复数乘法 (15)

来源:互联网 发布:活体脑细胞结局知乎 编辑:程序博客网 时间:2024/06/07 17:23

这道题是好题,不白错。
本题的关键考点在浮点数的位数保留上。
题中要求“在一行中按照“A+Bi”的格式输出两数乘积的常规形式,实部和虚部均保留2位小数。注意:如果B是负数,则应该写成“A-|B|i”的形式。”
只有付出才写成A-|B|i”的形式,但是如果保留两位小数的话,-0.005到0之间的负数会被保留0.00.但是输出判断的时候回判断它为负数,所以会输出-0.00的错误答案。
这是借鉴其他高手的程序:

#include<stdio.h>  #include<iostream>  #include<cmath>  using namespace std;  int main(){      double r1,r2;      double p1,p2;      cin>>r1>>p1>>r2>>p2;      double ansA = r1*r2*cos(p1+p2);      double ansB = r1*r2*sin(p1+p2);      if(-0.005<ansA&&ansA<0)printf("0.00");      else printf("%.2f",ansA);      if(ansB>=0)printf("+%.2fi\n",ansB);      else if(-0.005<ansB&&ansB<0)printf("+0.00i\n");      else printf("%.2fi\n",ansB);      return 0;  }   

这个是自己修改了无数遍才通过的渣渣程序:

// 2017/10/14 NCU // PAT-B 1053// scienceZ#include <cstdio>#include <cmath>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;double r1, p1, r2, p2, a, b, c, d, ans1, ans2;int main(){    cin >> r1 >> p1 >> r2 >> p2;    a = r1*cos(p1);    b = r1*sin(p1);    c = r2*cos(p2);    d = r2*sin(p2);    ans1 = a*c-b*d;    ans2 = a*d+c*b;    if (ans1<0 && ans1>-0.005) ans1 = 0.00;    if (ans2<0 && ans2>-0.005) ans2 = 0.00;    if (ans2>=0)  printf("%.2lf+%.2lfi", ans1, ans2);    else printf("%.2lf%.2lfi", ans1, ans2);    return 0;} 
原创粉丝点击