【漫步刷题路】-高精度算法(计算a的b次方)

简介: 用数组存放对应数据的商和余数,方便计算很大的数,如4的444次方等

d3e456a4929949a3a53d100c679ef149.png

🍕思想:

用数组存放对应数据的商和余数,方便计算很大的数,如4的444次方等

🍔步骤:


一.开辟一个较大的数组,数组的元素最初初始化为0,数组的最后一个元素初始化为1(或者第一个元素初始化为1,如果是第一个元素初始化为1的话,就往数组下面进位,如果是最后一位元素初始化为1,那就数组上进位)


二.进行循环计算和进位判断,循环次数为指数的大小,


对于每一轮循环:


1.遍历数组,数组的每一位元素都乘以底数


2.遍历数组,判断数组对于位置的值是否大于10,若大于则进位到数组前一个位置


三.找到数组中对于的值开始不为0处的下标,从此处开始向后打印

🍟 图解

dbf112faca764347bc018f18a324ac97.png


🥩代码

计算的是a的b次方,所以外层循环由b(指数)控制,循环内部乘的是a(底数)

int main()
{
    int arr[1000] = {0};  //用于存放计算的数据,初始化为0
    arr[999] = 1; //最初:数组最后一个元素定义为1
    int i = 0;
    int N = 0;//底数
    int M = 0;//指数
    printf("请输入底数:");
    scanf("%d",&N);
    printf("请输入指数:");
    scanf("%d",&M);
    //有1000个元素,最后一个元素下标为:999
    for(i = 0 ;i < M;i++)
    {
        int j = 0;
        for(j = 999;j>=0;j--)
        {
            arr[j] *=N; //数组中的每一位元素都乘以底数
            //最初只有数组最后一位乘了,因为其他位全为0
        }
         for(j = 999;j>=0;j--)
         {
             //如果数组中的元素大于等于10就进位,把余数放到本身,商放到上一个位置
             if(arr[j] >= 10)
             {
                 arr[j-1] += arr[j]/10;//商进位到上一个位置
                 arr[j] = arr[j] %10;//本身位置取余数
             }
         }
    }
    //最后遍历数组找到数组元素第一个不为0的位置
    int index = 0;
      for (i = 0; i < 1000; i++)
      {
         if (arr[i] == 0 && arr[i + 1] != 0)
        {
             //i+1位置元素不为0
            index = i + 1;
            break;
        }
      }
    //把前面的所有0不输出,从index位置开始才输出
        for (i = index; i < 1000; i++)
        {
             printf("%d", arr[i]);
        }
    return 0;
}

🥟注意

1.数组每个数乘底数 以及 数组每个数进行判断都是分开两个循环,遍历数组
2. arr[j-1] += arr[j]/10; 是把余数+到前一个位置,是+= 不是=

相关文章
|
2月前
|
机器学习/深度学习 存储 算法
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
【算法沉淀】刷题笔记:并查集 带权并查集+实战讲解
|
2月前
|
机器学习/深度学习 算法
递归算法题练习(数的计算、带备忘录的递归、计算函数值)
递归算法题练习(数的计算、带备忘录的递归、计算函数值)
|
2月前
|
算法 Java
算法:Java计算二叉树从根节点到叶子结点的最大路径和
算法:Java计算二叉树从根节点到叶子结点的最大路径和
|
4月前
|
算法 搜索推荐 图计算
图计算中的社区发现算法是什么?请解释其作用和常用算法。
图计算中的社区发现算法是什么?请解释其作用和常用算法。
31 0
|
5月前
|
自然语言处理 算法
算法刷题(二十三):Bigram 分词
算法刷题(二十三):Bigram 分词
41 0
|
5月前
|
算法
算法刷题(二十二):宝石与石头
算法刷题(二十二):宝石与石头
39 0
|
6天前
|
算法 TensorFlow 算法框架/工具
基于直方图的图像阈值计算和分割算法FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于图像处理的算法实现摘要,主要包括四部分:展示了四张算法运行的效果图;提到了使用的软件版本为VIVADO 2019.2和matlab 2022a;介绍了算法理论,即基于直方图的图像阈值分割,通过灰度直方图分布选取阈值来区分图像区域;并提供了部分Verilog代码,该代码读取图像数据,进行处理,并输出结果到&quot;result.txt&quot;以供MATLAB显示图像分割效果。
|
23天前
|
算法
算法系列--链表刷题(二)(下)
算法系列--链表刷题(二)(下)
17 0
|
4月前
|
算法
bellman_ford算法与dijkstra为什么dijkstra算法不能计算带有负权边图
bellman_ford算法与dijkstra为什么dijkstra算法不能计算带有负权边图
22 0
|
4月前
|
算法 定位技术
每日刷题|贪心算法初识
每日刷题|贪心算法初识