求2的N次幂(C++)解决高精度运算

这篇具有很好参考价值的文章主要介绍了求2的N次幂(C++)解决高精度运算。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

求2的N次幂(C++)解决高精度运算

​👻内容专栏:《C/C++专栏》
🐨本文概括: 计算高精度的2的N次方数字。
🐼本文作者:花 碟
🐸发布时间:2023.6.22

​前言

为什么不直接利用int、float、double等类型进行存储计算,因为它们是存在有效数据范围的, 比如说int的范围是 -2147483648 ~ 2147483647 字节,数值最多占据10位,8字节的 long int 型的取值范围是-9,223,372,036,854,775,808~9,223,372,036,854,775,807,而如果想存储更大的数字的话,有效范围之内并不能容忍得下,超出的数据就会导致精度的丢失,故而以下解法是针对高精度计算问题,利用数组的每一个元素去模拟数值的位数。😉👇

求2的N次方,N ≤ 10000

首先,我们应该要把数字存储倒序存储到数组当中,数值的个位放到数组a[0]的位置,十位放到数组a[1]的位置,百位放到数组a[2]的位置……依次类推,为什么要倒序存储呢,因为我们需要对数值进行运算,比如说如果将12345678912345正序存储,将这个数值乘上2,那么可能会涉及到进位运算,如果进位到最高位之后还需要进1,那么此时数组a[0]的位置就不容易修改了,所以我们将最低位放到数组首元素位置。

求2的N次幂(C++)解决高精度运算
💡

实现思路:

⚠️注:为了方便理解,我们暂时将画图中给定的数值为 12345678912345。本题的实现,注意数组初始化必须为1,才能保证求2的N次幂得到想要的结果。

首先将2N转换为一共有多少位,取以10为底的对数,即 log102N,转换为N * log102 ,题目要求N最多取10000,换算大概3010多位,因为肯定含有进位,所以我们将数组的大小定义为3100个,从数组的a[0]位置模拟个位,a[1]位置模拟十位……开始计算,我们需要将数组的元素初始化为1,因为1乘以任何数都是任何数。然后用t来存储当前数值是否需要进行进位,如果是进位的话需要加到下个数值里面去,所以我们写成 t += a[j] * 2; 然后将取模运算得下的个位数,放到b数组对应的位置(实现时,我们不需要开辟b数组,直接对a数组进行覆盖即可,这里方便理解,所以放到b数组之中),再继续运算,上一位进位的t加上本次a数组对应的值乘上2 依然能够整除10,那么结果为1,就表示进位,再给到t,否则为0,表示不进位。……以此类推,最后为了保证数组的有效个数的位置,我们用m来记录,一旦每次乘以2之后,t进位为1,就让m++。最后输出数组中的值,我们就要倒过来输出,我们从m - 1的位置一直输出的0即可,因为m++是后置的,多加了一次,所以m需要减去1。

求2的N次幂(C++)解决高精度运算

代码实现:

😉😉

#include <iostream>
const int N = 3300;
using namespace std;

int main() {
  
    // 最低为数字是1,因为它乘以任何数都是任何数
    int a[N] = {1};
    int n;
    cin >> n;
    //m标记进位完后的位置
    int m = 1;
    // 输入的 n 是 2 的幂次,并非乘数
    for (int i = 0; i < n; i++) {
        int t = 0;
        // 循环内的数字从低位不断被取出,这些数字都从左到右存放,也就是个位数在最左端,每次从数组a中读取个位十位,分别与 2 相乘
        // 运算后把数字存回原数组
        for (int j = 0; j < m; j++) {
            t += a[j] * 2;
            a[j] = t % 10;
            t /= 10;
        }
        // 负责进位,for循环最后一个操作是 t / 10,由于乘以2,最大为19, 因此若商为1,必定进位1
        if (t) a[m++] = 1;
    }
	//m多加了1次,减去1
    for (int i = m - 1; i >= 0; i--) cout << a[i];

    return 0;
}

测试结果

输入10000,210000的结果如下:
求2的N次幂(C++)解决高精度运算文章来源地址https://www.toymoban.com/news/detail-497662.html

到了这里,关于求2的N次幂(C++)解决高精度运算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++基础算法高精度篇

    📟作者主页:慢热的陕西人 🌴专栏链接:C++算法 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要讲解了高精度算法的四种常用的计算 以下数字均指位数 ①A + B(精度均在10^6) ②A - B (精度均在10^6) ③A * b (len(A) = 10^6, a = 1000); ④A / b (len(A) = 10^6, a = 1000); Ⅲ. Ⅰ . A

    2024年02月16日
    浏览(27)
  • C++ 算法 高精度(较详细.)

            在我们进行计算的过程中,经常会遇到 几十位,甚至几百位的数字 的计算问题,也有可能会遇到小数点后几十位,几百位的情况,而我们面对这样的情况下,   和 的数据范围显然是 不够使用 的了。因此这时,我们就需要引入一个新的算法,叫做 高精度算法

    2023年04月10日
    浏览(26)
  • 高精度除法【c++实现】超详细讲解

    高精度算法分为两种,高精除以低精和高精除以高精。不要看都是除法,就认为原理类似,其实是有很大差距的。让我们一起来学习吧! 有句话说在前面,如果除数等于0,就不要算了,不成立。( 如果你忘了这个知识,小学数学老师饶不了你 ) 高精度除低精度,原理是模

    2024年02月13日
    浏览(22)
  • C++基础算法①——高精度加减法计算

    当我们利用计算机进行数值计算,有时候会遇到这样的问题: n!的精确结果是多少? 当n小于30的时候,我们当然可以通过电脑自带的计算器计算出来。但是当我们遇到 100! 的时候就没有办法直接计算出精确的结果。再比如,求两个20000位的数的和。 那怎么解决精度缺失的问

    2024年02月16日
    浏览(35)
  • 【c++】算法:高精度(经典加减乘除){含解析(图解)}

    Hi~ o(* ̄▽ ̄*)ブ,今天来一起看看c++算法之高精度 之后会持续更新有关c++算法系列,欢迎观看!(#^.^#) 目录 前言 使用高精度的目的: 基本方法介绍:   一、A+B problem 基本思路解析: 具体步骤: 代码如下: 二、A-B problem 基本思路解析: ​编辑 具体步骤:  代码如下:  三

    2024年01月23日
    浏览(45)
  • 【分享】高精度RTK定位解决方案

    高精度RTK定位系统采用高精度定位标签,通过计算机技术、地理信息技术、移动定位技术、通信技术、网络技术,为生产现场作业人员配发定位终端,实时追踪其位置信息进行相关管控,为其活动提供安全技术保障。   近年来,随着铁路建设的不断推进,我国铁路行业不断发

    2024年02月03日
    浏览(45)
  • 双目相机标定及高精度测量方法,含c++和python代码说明

    视觉测量定位中,双面相机高精度标定是一个重要的步骤。下面是关于如何进行双面相机高精度标定的说明和C++和Python代码实现。 1. 双面相机高精度标定的原理 双面相机高精度标定的目的是确定相机内部参数和外部参数。其中,内部参数包括焦距、主点和畸变系数等,外部

    2023年04月08日
    浏览(31)
  • 【分享】5G+北斗RTK高精度人员定位解决方案

    5G+北斗RTK高精度定位系统旨在通过5G网络实时提供亚米级、厘米级、毫米级高精度定位服务,构建全天候、全天时、全地理的精准时空服务体系。 伴随着信息技术日新月异的发展,各类“智慧”顺势而出,智慧城市、智慧医院、智慧工厂、智慧电厂等等如雨后春笋,与工业

    2023年04月09日
    浏览(35)
  • (基础算法)高精度加法,高精度减法

    什么叫做高精度加法呢?包括接下来的高精度减法,高精度乘法与除法都是同一个道理。正常来讲的话加减乘除,四则运算的数字都是整数,也就是需要在int的范围之内,但当这个操作数变得非常\\\"大\\\"的时候( 其实就是一个字符串,比方说有一个数是20位,如果用整数视角来

    2024年02月01日
    浏览(34)
  • 高精度加法

    高精度问题是指两个数字非常大,超过了 int ,甚至 long long 的范围,数字的位数甚至能达到 (10^5) ,那么如果要实现这样两个大数字的运算,需要解决以下两个问题: 如何存储? 这样的两个数字相加是不可能用普通类型来存储的,所以我们第一个要解决的问题就是如何存储

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包