[英]Division and Mod with negative numbers
我正在尝试解决应该很简单的竞赛问题 。
两个数字a和b (-1.000≤a,b <1.000)的商q和余数r的结果是什么?
输入由2个数字a和b组成 。
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.