错误很明显,上一个帖子里已经说得很明白了。题目要求 0≤r<b,r 必须不为负数。
用下面的代码测一下数据(不要在意是Python,C++也可以测试)
import sys
a,b=map(eval,input().split())
if a<0 and b<0:sys.exit(211)
if a<0:sys.exit(233)
if b<0:sys.exit(255)
print("%.5f"%(a%b))
测试记录:这个题有负数的测试点
有一个测试点输入只有第一个数是负的,还有一个测试点输入只有第二个数是负的。
随便造两个数据,测试一下题解:
10.0 -3.0
和-10.0 3.0
,正确且精确的结果分别为1
和2
下面是题解输出
OIerC2020cmh
1
和-1
1
和-1
囧仙
1
和-1
1
和-1
1
和-1
零殇
1
和-1
给文明以岁月
1
和-1
无一例外,所有题解给出的所有代码输出的第二个数据的结果都是错误的。
对于也为别人而流给出的代码
a, b = map(float, input().split())
print(a % b)
输出:
-2.0
和2.0
这个代码也是错误的,显然结果不能出现负数,其实最终结果如果是负数时只需要再加上abs(b)即可。
其实还可以加入一组类似-10.0 -3.0
的数据。
下面给出Python参考正解:
a,b=map(float,input().split())
print(a%abs(b))
和C/C++参考正解:
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,ans;
scanf("%lf%lf",&a,&b);
ans=fmod(a,b);
if(ans<0)ans+=abs(b);
printf("%.6f",ans);
}