本篇文章讲解题目:最后一位
推荐先独立进行解题尝试,然后再阅读本篇讲解!
在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},那么我们便不能使用第一种方法,而使用后一种方法便可以轻松得到正确答案。
这才是这一题的意义!