老题新解|计算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---

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

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

我们下集见~

相关推荐
墨染点香20 分钟前
LeetCode 刷题【144. 二叉树的前序遍历】
数据结构·算法·leetcode
自由随风飘4 小时前
python 题目练习1~5
开发语言·python
cynicme5 小时前
力扣3318——计算子数组的 x-sum I(偷懒版)
java·算法·leetcode
Bony-5 小时前
Go语言完全学习指南 - 从基础到精通------语言基础篇
服务器·开发语言·golang
fl1768316 小时前
基于python的天气预报系统设计和可视化数据分析源码+报告
开发语言·python·数据分析
ACP广源盛139246256737 小时前
(ACP广源盛)GSV6172---MIPI/LVDS 信号转换为 Type-C/DisplayPort 1.4/HDMI 2.0 并集成嵌入式 MCU
c语言·开发语言·单片机·嵌入式硬件·音视频
不穿格子的程序员7 小时前
从零开始刷算法-栈-括号匹配
java·开发语言·
雪域迷影7 小时前
C#中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·http·c#·get
yue0087 小时前
C#类继承
java·开发语言·c#
Want5957 小时前
Python汤姆猫
开发语言·python