【愿成其身】[7]整数的魅力 – 数字的最后一位

/ 0评 / 0

篇文章讲解题目:最后一位

推荐先独立进行解题尝试,然后再阅读本篇讲解!



在C语言中,除了加减乘除运算之外,还有一个较为常用的运算,取余"%"。

5 \% 2 = 1

由数学知识得,一个整数对10取余即可得到最后一位数字。

12345 \% 10 = 5

这一题便可使用这一种方法轻松得出答案。


从上一篇文章中学到,这里如果计算A×B的话,依旧应该使用long long,然后对结果进行取余运算即可。

	printf("%d\n",(A*B)%10);

因为最后一位数字肯定是int范围内的数字,所以可以直接以int型输出。


对于这一题来说还有一种避免使用long long的方法。

我们想到,对于乘法,其结果的最后一位只取决于A和B的最后一位,所以我们可以先分别求出A与B的最后一位,然后求出最后一位相乘的最后一位。


这种把\left( A\times B\right) \% 10转变为\left[ \left( A\% 10 \right) \times \left( B\% 10 \right) \right] \% 10的思维,对于ACM来说很重要,因为通过各种转化,我们可以突破题目的一些数据限制,从而得到正确答案。

思考,若题目的数据范围是0 \leq a,b \leq 10^{18},那么我们便不能使用第一种方法,而使用后一种方法便可以轻松得到正确答案。

这才是这一题的意义!

发表评论

邮箱地址不会被公开。 必填项已用*标注