我试图解决一个本来应该简单的contest problem。
两个数字 a 和 b 的商 q 和余数 r 的结果是什么( - 1.000≤a,b <1.000)?
输入包含2个数字 a 和 b 。
3种不同输入的示例:
7 3
7 -3
-7 3
输出是 q 的商,其次是 a 除 b 的余数 r b 。
输出示例:
2 1
-2 1
-3 2
我的代码:
#include<stdio.h>
int main(){
int a,b;
scanf("%d %d",&a,&b);
int r = 0;
if(a > 0)
r = a%b;
if(a < 0)
r = (a%b + b)%b;
printf("%d %d\n",(a-r)/b,r);
}
我的解决方案在10%的测试用例中都是错误的,我不知道出了什么问题。
答案 0 :(得分:1)
您的代码存在的问题是,当b为负数时,它不遵循规范。
a%b与C ++的某些实现中的%( - b)相同。 (感谢DarioOO澄清这一点。请参阅DarioOO的评论。)假设这就是这种情况。你的代码
if(a < 0)
r = (a%b + b)%b;
假设b为正。如果b = -3且a = -7,则%b为-1,并且您的代码指定r =( - 4)%( - 3),即-1。你应该产生一个非负余数,2。如果b <0,你想要
if(a < 0)
r = (a%b - b)%b;
代替。