求个位数

输入一个整数 n ,求 nn 的个位数是多少。

输入格式
一个整数: n

输出格式
输出格式:个位数(0 – 9中的数)

数据范围
1 <= n <= 109

输入样例
9

输出样例
9

思路:按照正常思路求解,导入math模块 pow(n,n)。
不妨了解一下快速幂算法。

模运算性质

(a + b) \% p = (a \% p + b \% p) \% p \\ (a - b) \% p = (a \% p - b \% p ) \% p \\ (a * b) \% p = (a \% p * b \% p) \% p

快速幂算法

2^9 可以分解为2*2^8 注意此时指数为奇数 奇数时需要分出一个底数
然后 2^8=4^4=16^2 可以看到 当指数为偶数 可以将底数合并起来
这就是快速幂的思路 奇数拆 偶数合 降低时间复杂度

#include<stdio.h>
//#include<math.h>

int ges(int num);

int main() {
    //clock_t为CPU时钟计时单元数
    int n = 9;
    printf("ges():%d \n",ges(n));
    return 0;
}

int ges(int num) {
    int base = num;
    int pow = num;
    int result = 1;
    while(pow>0) {
        if(pow%2 & 1 == 1) { // 奇数
            result = result * base % 10;
        }
        pow >>= 1; //位运算 右移等于除以2
        base = (base*base)%10;
    }
    return result;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容