繁体   English   中英

负数除法和Mod

[英]Division and Mod with negative numbers

我正在尝试解决应该很简单的竞赛问题

两个数字ab (-1.000≤a,b <1.000)的商q和余数r的结果是什么?

输入由2个数字ab组成

3种不同输入的示例:
7 3
7 -3
-7 3

输出是商q,后跟a除以b的余数r

输出示例:
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%的测试用例中是错误的,而且我不知道什么是错误的。

您的代码的问题在于,当b为负数时,它不符合规范。

在C ++的某些实现中,a%b与a%(-b)相同。 (感谢DarioOO澄清这一点。请参见DarioOO的评论。)假设情况就是这样。 您的密码

if(a < 0)
    r = (a%b + b)%b;

假设b为正。 如果b = -3和a = -7,则a%b为-1,并且您的代码将r =(-4)%(-3)分配为-1。 您应该产生一个非负的余数2。如果b <0,则需要

if(a < 0)
    r = (a%b - b)%b;

代替。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM