老题新解|计算2的N次方

《信息学奥赛一本通》第166题:计算2的N次方

计算 2 的 N 次方

任意给定一个正整数 n (n<=100),计算 2 的 n 次方的值。

输入:

一个正整数 n。

输出:

2 的 n 次方的值。

样例输入:

5

样例输出:

32

大家好,我是莫小特。

这篇文章给大家带来《信息学奥赛一本通》中的第 166 题:计算 2 的 N 次方。

一、题目描述

任意给定一个正整数 n (n<=100),计算 2 的 n 次方的值。

输入:

一个正整数 n。

输出:

2 的 n 次方的值。

样例输入:

5

样例输出:

32

二、题意分析

这道题是信息学奥赛一本通练习题的第 166 题。

根据输入描述,输入一个正整数 n,使用 int 类型。

cpp 复制代码
int n;
cin>>n;

输入完成后,分析题目,题目要求我们计算 2 的 n 次方的值,如果要计算 2 的 n 次方的值,可以使用 pow 函数,直接输出即可。

但是数据量比较大,因此需要考虑用高精度来实现。

因此需要定义一个数组来存储这些数据,元素个数为 10000。

cpp 复制代码
int a[10000];

结果的初始值为 1。

cpp 复制代码
a[1]=1;

新建一个变量计算进位,同样初始化为 0。

cpp 复制代码
int x=0;

计算 n 次,使用 for 循环实现。

cpp 复制代码
for(int i=1;i<=n;i++)
{

}

求的结果存储在 a数组中,定义一个变量存储结果的长度。

cpp 复制代码
int len=1;//len为位数,初始值为1
for(int j=1;j<=len;j++)
{
	
}

得数的每一位都乘以 2 并加进位。

cpp 复制代码
a[j]=a[j]*2+x;//得数的每一位都乘2再加进位
x=a[j]/10;//计算进位
a[j]%=10;//保留个位数

特别注意:如果计算到有最高位并且有进位,长度加 1。

cpp 复制代码
if(x!=0&&j==len) len++;

最后倒序输出结果。

cpp 复制代码
for(int i=len;i>=1;i--)
{
	cout<<a[i];
}

按照样例输入对数据进行验证。

符合样例输出,到网站提交测评。

大数的计算测试一下。

结果正确。

三、完整代码

该题的完整代码如下:

cpp 复制代码
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int a[10000];
int main()
{
	int n;
	cin>>n;
	a[1]=1;
	int x=0;
	int len=1;//len为位数,初始值为1
	for(int k=1;k<=n;k++)
	{	
		for(int j=1;j<=len;j++)
		{
			a[j]=a[j]*2+x;//得数的每一位都乘2再加进位
			x=a[j]/10;//计算进位
			a[j]%=10;//保留个位数
			if(x!=0&&j==len) len++;
		}
	} 
	for(int i=len;i>=1;i--)
	{
		cout<<a[i];
	}
    return 0;
}

四、总结

通过本题《计算 2 的 N 次方》的学习,我们掌握了高精度乘法的基本思想与实现方法。当 n 较大(如超过 30)时,普通整型或长整型已经无法存储 2n2^n2n 的结果,因此必须使用数组来模拟手算过程。

在本题中,我们重点练习了以下几个知识点:

高精度存储:

使用整型数组 a[] 按位存储结果,每个元素代表一个十进制位,解决了普通数据类型无法容纳大数的问题。

逐位乘法与进位处理:

从最低位开始,每一位都乘以 2,并加上前一位的进位值 x,通过 /10 和 %10 操作分别得到新的进位与当前位的值。

长度控制与扩展:

若最高位产生进位,则需要将当前结果长度 len 加 1,保证数组能完整保存计算结果。

逆序输出结果:

由于计算过程中低位在前,高位在后,最终输出时需从 len 到 1 倒序打印,得到正确的数值顺序。

技巧总结:

高精度乘法的核心思想是"按位运算 + 手动进位"。

初始化结果为 1,从第 1 次乘到第 n 次,每次都完整遍历数组。

输出时一定要注意倒序,否则结果会反向。

通过本题的练习,我们不仅掌握了大数乘法的实现过程,也为后续学习高精度加减乘除运算打下了坚实的基础。
---end---

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!

如果有更好的方法也可以在评论区评论哦,我都会看哒~

我们下集见~

相关推荐
惊讶的猫1 分钟前
InnoDB选用B+树作为索引的原因
数据结构·b树
liu_endong1 分钟前
杰发科技AC7840——打印所有GPIO的PORT配置寄存器
mcu·算法·杰发科技·autochips·车规芯片
霍理迪2 分钟前
JS其他常用内置对象
开发语言·前端·javascript
老鼠只爱大米5 分钟前
LeetCode经典算法面试题 #199:二叉树的右视图(BFS双队列法、DFS递归法等多种实现方案详细解析)
算法·leetcode·二叉树·dfs·bfs·深度优先搜索·右视图
历程里程碑7 分钟前
子串-----和为 K 的子数组
java·数据结构·c++·python·算法·leetcode·tornado
一起养小猫8 分钟前
Flutter for OpenHarmony 进阶:表达式解析算法与计算器核心实现
算法·flutter·harmonyos
池央14 分钟前
贪心-最长递增子序列
算法·贪心算法
王多鱼鱼鱼16 分钟前
QT如何将exe打包成可执行文件
开发语言·qt
We་ct18 分钟前
LeetCode 383. 赎金信:解题思路+代码解析+优化实战
前端·算法·leetcode·typescript
DokiDoki之父19 分钟前
边写软件边学kotlin(一):Kotlin语法初认识:
android·开发语言·kotlin