#t206. 带余除法

带余除法

带余除法

题目背景

Special for beginners, ^_^

题目描述

给定被除数和除数,求整数商及余数。

此题中请使用默认的整除和取余运算,无需对结果进行任何特殊处理。看看程序运行结果与数学上的定义有什么不同?

输入格式

一行,包含两个整数,依次为被除数和除数(除数非零),中间用一个空格隔开。

输出格式

一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。

样例输入

10 3

样例输出

3 1

数据范围

1s, 1024KiB for each test case.

提示

一、/ 和 % 是一对:一个求商,一个求余

对两个整数:

  • a / b 得到商的整数部分(小数部分直接丢掉);
  • a % b 得到余数。
printf("%d\n", 17 / 5);   // 3
printf("%d\n", 17 % 5);   // 2

它们满足一个恒等式,可以用来验算:

17 = 3 * 5 + 2   ✓

二、% 的三条规则

  1. 只能用于整数。5.5 % 2 编译不过(小数取余要用 fmod)。
  2. 除数不能为 0,a % 0 会导致程序崩溃(RE)。
  3. 结果的符号跟着被除数走:-7 % 3 是 -1,不是 2。正数运算时不用管这条。

三、% 最常见的用途

  • 判断能不能整除:n % 3 == 0 表示 n 是 3 的倍数;
  • 取某一位数字:n % 10 是个位;
  • 控制循环范围:结果一定落在 0 ~ b-1 之间(被除数非负时)。

四、常见错误

  • 把 % 当百分号用(输出百分号要写 %%);

  • 对小数取余;

  • 以为 -7 % 3 是 2。

  • 题面说「用默认的整除和取余」,就是直接用 / 和 %,不要自己写四舍五入。

  • 商和余数在一行输出,中间一个空格。

自查:拿 10 3 → 3 1 验证;再试 10 4,想一想余数为什么一定小于除数。