栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言之快速幂优化水仙花数

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言之快速幂优化水仙花数

#include 
int quickpow(int x, int y)
{
    int a = 1;
    while (y)
    {
        if (y & 1)
            a *= x;
        x *= x;
        y >>= 1;
    }
    return a;
}
int main()
{
    int n, i = 1, f, q;
    scanf("%d", &n);
    f = quickpow(10, n - 1); //因为我们要找n位数的值所以现设f从n-1位数开始
    i = f;                   //用i记录
    while (i < f * 10)
    {
        q = i;       //用q记录i
        int sum = 0; //用sum记录各位数n次方之和
        do
        {
            int p;
            p = q % 10;            //用p记录各位数
            q /= 10;               //每一次我们把q丢掉后面的一位
            sum += quickpow(p, n); //quickpow效果等同于pow不用管
        } while (q > 0);           //我们每次丢的过程中q都在少一位最后变为0,这就是我们跳出循环条件
        if (sum == i)
            printf("%dn", sum);
        i++; //遍历10的n-1次方到10的n次方之间的数
    }
    return 0;
}

 quickpow为快速幂过程

主要过程是把指数二进制

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/589565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号