Division和Mod带负数

时间:2015-07-27 22:50:06

标签: c++ math

我试图解决一个本来应该简单的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%的测试用例中都是错误的,我不知道出了什么问题。

1 个答案:

答案 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;

代替。