【PAT】B1051 复数乘法(15 分) - 路明天 - 博客园 https://www.cnblogs.com/hebust/p/9496809.html

在此对四舍五入输出结果做总结。

对于doublde 类型,int i = (int )(a+0.5),实现保留到个位的四舍五入,一般的“.2f”是四舍六入五成双的。

另外就是针对double的0的处理,要特别注意在0附近实现四舍五入。

    if (A + 0.005 >= 0 && A < 0)
printf("0.00");
else
printf("%.2f", A);
if(B >= 0)
printf("+%.2fi", B);
else if (B + 0.005 >= 0 && B < 0)
printf("+0.00i");
else
printf("%.2lfi", B);

B1051 复数乘法 (15分)

输入格式:

输入在一行中依次给出两个复数的R和P,数字间以空格分隔。

输出格式:

在一行中按照 A+Bi的格式输出两数乘积的常规形式,实部和虚部均保留 2 位小数。注意:如果 B 是负数,则应该写成 A-|B|i 的形式。

输入样例:

2.3 3.5 5.2 0.4

输出样例:

-8.68-8.23i

别人的AC代码

还要注意到用四舍五入的方法判断是否应该输出0.00

这个计算方法,比我的简单,我想要代码复用,反而造成了恶果。

保留两位小数

if (A + 0.005 >= 0 && A < 0)
printf("0.00");

为什么保留两位小数这么复杂,这里是若5则入,对0的符号,对0附近的数特别对待。

保留两位小数,.2lf使用的是,四舍六入五成双的规则。

要四舍五入,那么就用round函数,得到一个double 在强制转换int,就是整数位的四舍五入去掉小数部分,不如

int i = (int)(a+0.5)的技巧漂亮。

#include <math.h>
#include<stdio.h>
int main() {
double r1, p1, r2, p2, A, B;
scanf("%lf %lf %lf %lf",&r1,&p1,&r2,&p2);
r1*=r2;p1+=p2;
A = r1 * cos(p1);
B = r1 * sin(p1);
if (A + 0.005 >= 0 && A < 0)
printf("0.00");
else
printf("%.2f", A);
if(B >= 0)
printf("+%.2fi", B);
else if (B + 0.005 >= 0 && B < 0)
printf("+0.00i");
else
printf("%.2lfi", B);
return 0;
}

从这里的AC代码,得到的启示,或者说小知识,就是保留小数位的精度,输出,对于0附近的数要特别注意。要实现这里的四舍五入输出0.00或者0.000之类的,采用+0.005>=0 并且本身小于0,来实现四舍五入。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cmath>
using namespace std; int main()
{
double R1, P1, R2, P2;
double a, b, c, d; cin >> R1 >> P1 >> R2 >> P2;
a = R1*cos(P1);
b = R1*sin(P1);
c = R2*cos(P2);
d = R2*sin(P2); double shi, xu;
shi = a*c - b*d;
xu = b*c + a*d;
if (abs(shi) < 0.001)
shi = 0;
if (abs(xu) < 0.001)
xu = 0; if (xu >= 0)
printf("%.2f+%.2fi", shi, xu);
else if (xu < 0)
printf("%.2f%.2fi", shi, xu); system("pause");
return 0;
}

作者:ad50468549

来源:CSDN

原文:https://blog.csdn.net/u011036919/article/details/66975447

版权声明:本文为博主原创文章,转载请附上博文链接!

	double shi, xu;
shi = a*c - b*d;
xu = b*c + a*d;
if (abs(shi) < 0.001)
shi = 0;
if (abs(xu) < 0.001)
xu = 0; if (xu >= 0)
printf("%.2f+%.2fi", shi, xu);
else if (xu < 0)
printf("%.2f%.2fi", shi, xu);

修改

	if (abs(shi) <= 0.004)
shi = 0;
if (abs(xu) <= 0.04)
xu = 0;

依然能够AC掉

改成0.1,有一个测试点过不去,所以那一个测试点,正是在考察对0的四舍五入

如果是-0.004,那么应该输出的是-0.00吗?

printf("%.2f", -0.004);

输出的是-0.00

printf("%.2f", -0.005);

这样输出的是-0.01,还是一样的四舍五入进位了。

但是这个进位是绝对值的进位(c++)和需要的对0处理不符合按照AC代码1,这里应输出0.00

B1051 复数乘法(15 分)的更多相关文章

  1. PAT Basic 1051 复数乘法 (15 分)

    复数可以写成 ( 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 1:也可以写成极坐标下的指数形式 (,其中 R 是复数模,P 是辐角,i 是虚数单位,其等价于三角形式 (. 现给定两 ...

  2. 1051 复数乘法 (15 分)C语言

    复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i^​2=−1:也可以写成极坐标下的指数形式 (R×e​(Pi)​ ),其中 R 是复数模,P 是辐角,i ...

  3. PAT-乙级-1051. 复数乘法 (15)

    1051. 复数乘法 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 复数可以写成(A + Bi)的常规 ...

  4. PAT 乙级 1091 N-自守数 (15 分)

    1091 N-自守数 (15 分) 如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3×92​2​​=25392,而 25392 的末尾两位正好是 ...

  5. PAT 乙级 1086 就不告诉你 (15 分)

    1086 就不告诉你 (15 分) 做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三.”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. 输入格式 ...

  6. PTA 7-3 jmu-ds-单链表的基本运算(15 分)

    jmu-ds-单链表的基本运算(15 分) 实现单链表的基本运算:初始化.插入.删除.求表的长度.判空.释放.(1)初始化单链表L,输出L->next的值:(2)依次采用尾插法插入元素:输入分两 ...

  7. PAT 乙级 1071 小赌怡情(15 分)

    1071 小赌怡情(15 分) 常言道“小赌怡情”.这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩 ...

  8. PAT 乙级 1051 复数乘法 (15) C++版

    1051. 复数乘法 (15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 复数可以写成(A + Bi)的常规 ...

  9. 求交错序列前N项和(15 分)

    7-2 求交错序列前N项和(15 分) 本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在 ...

随机推荐

  1. 打印流-PrintStream

    打印流-PrintStream java.io.PrintStream为其他输出流添加了功能,使其他的流能够更方便的打印各种数据值表现形式 PrintStream特点: 1.只负责数据的输入,不负责数 ...

  2. Android Service创建USB HOST通信

    之前做了一个关于Android USB通信的Case,通过Android的USB总线给Zigbee供电,和板载的Zigbee(基于Zigbee的自组网)进行通信.要使用Android的USB Host ...

  3. JavaSE之Java基础(5)

    21.简述正则表达式及其用途. 在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 22.Java ...

  4. nodejs入门学习笔记二——解决阻塞问题

    在最开始,我们要弄清楚node会什么会存在阻塞? node是这么标榜自己的:“在node中除了代码,所有一切都是并行执行的!” 意思是,Node.js可以在不新增额外线程的情况下,依然可以对任务进行并 ...

  5. css最佳实践(reset.css)

    html, body, div, span, object, iframe,h1, h2, h3, h4, h5, h6, p, blockquote, pre,abbr, address, cite ...

  6. Java字节流与字符流的区别详解

    字节流与字符流 先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入 ...

  7. python+selenium之自动生成excle,保存到指定的目录下

    进行之自动化测试,想把自动生成的excle保存到指定的目录下.网上百度的代码如下: import xlwt import time time = time.strftime ('%Y%m%d%H%M% ...

  8. 这些年,在wp平台打拼的日子

    最近经常胃疼,在当地的镇医院看了几次都没有改善,只好去市医院照胃镜检查,发现有胃炎,虽然是很普通和常见的毛病,但这种毛病一但沾上,就很难根治,一喝酒或者吃饭不定时.熬夜.吃酸辣冷冻等食物都容易引起复发 ...

  9. log4j.properties中的这句话“log4j.logger.org.hibernate.SQL=DEBUG ”该怎么写在log4j.xml里面呢?

    http://www.cnblogs.com/gredswsh/p/log4j_xml_properties.html 请问:log4j.properties中的这句话“log4j.logger.or ...

  10. Linux 下MySQL数据库配置远程访问

    1. mysql -u root -p 第一次直接回车跳过密码 2. use mysql; 3.执行授权命令 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDE ...