叶安槿
(祺屿鑫l槿)
1
7. 浮点数精度
题目ID:20484必做题100分
时间限制: 1000ms
空间限制: 262144kB
题目描述
楠枫学习编程的过程中遇到了一个大麻烦,他发现作为人类智慧的结晶——计算机,竟然无法正确的计算加法,他觉得很不可思议!比如
0.1
+
0.2
=
0.3
0.1+0.2=0.3 是正确的,可是当他编程时程序的判断却是错误的。他的代码大致如下:
后来老师告诉他,这是因为计算机用二进制存储数据,有可能无法精确地表示某些十进制小数,所以两者判等时出错。既然知道了原因,楠枫打算找一找这种在计算上本该相等,却在程序判等时不一致的数。他的寻找方法如下:
对于含有
�
m 位小数的数字
�
d (数字
�
d 除最后一位数位不为 0 外,其余都为 0,如含有 6 位的小数 0.000003),按如下步骤操作:
通过
�
×
1
0
�
d×10
m
获得的数字
�
d 非零位上的数字
�
s;
把
�
s 扩大
�
k 倍后再除以
1
0
�
10
m
,以获得与
�
d 的
�
k 倍对应的浮点数
�
(
�
=
�
�
1
0
�
)
v(v=
10
m
sk
);
通过程序将
�
k 个
�
d 加起来的和与
�
v 直接进行判等。
其中,
�
k 是一个正整数,为了获得更多数据,楠枫会把
�
k 从 1 枚举到
�
(
1
≤
�
≤
�
)
n(1≤k≤n),也就是他会按上述步骤判等
�
n 次,依次检查
�
d 的 1 倍、 2 倍、 3 倍……
�
n 倍。如果发现判等结果不成立,将会按要求打印一个不等式,格式为:
�
+
�
+
⋯
+
�
⏟
�
个 d
!
=
�
k个 d
d+d+⋯+d
!=v
输入格式
第一行两个整数,表示最大的倍数
�
n 和小数位数
�
m;第二行一个小数,代表要检查的小数
�
d。
输出格式
如果有判等结果不成立,就输出一行不等式(
�
、
�
d、v 要保留
�
m 位小数);如果所有的判等结果都成立,输出内容为空。
样例
Input 1
10 1
0.1
Output 1
0.1 + 0.1 + 0.1 != 0.3
0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 != 0.8
0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 != 0.9
0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 != 1.0
样例解释
对于例子,n=10,m=1,d=0.1,当k分别等于3,8,9,10时,判等结果不成立,因此会输出4行不等式。
数据范围
5
≤
�
≤
20
5≤n≤20 且
1
≤
�
≤
10
1≤m≤10
1. 日期
题目ID:9534必做题100分
最新提交:
Wrong Answer
0 分
历史最高:
Wrong Answer
0 分
时间限制: 1000ms
空间限制: 524288kB
题目描述
公历日期标准格式为:2007年2月6日;或:2007-02-06。现在请你读入一个日期,将年份增加20后再按正确格式输出,如:2027-02-06。
注意如果月和日为一位数,输出要在前面补零变成两位数。年份一定是四位数。
输入格式
三个整数,用-隔开,分别表示为年月日。
输出格式
见样例输出
样例
Input 1
1945-9-2
Output 1
1965-0
1 个赞
俞天行
(ytxqwq)
5
这么水不会? 
还有,你这个 \LaTeX 不是一般的炸裂
1 个赞
俞天行
(ytxqwq)
6
会用 printf
嘛?知道怎么保留小数吧,就能过了。公式的话用 pow
函数,这样就可以了:
d * pow(10, m) * i / pow(10, m)
AC了给解决方案
1 个赞