第五章 高精度运算(C++) 第3课 贝贝与国王(king)《聪明人的游戏 信息学探秘.提高篇》

1170:计算2的N次方

信息学奥赛一本通(C++版)在线评测系统

1.6编程基础之一维数组_12计算2的N次方

OpenJudge - 12:计算2的N次方




【问题描述】

    传说古代印度有个喜欢下棋的国王叫舍罕,而宰相贝贝是个聪明的大臣,发明了国际象棋。国王玩得爱不释手,决定奖赏宰相。贝贝说:陛下,我别无他求,请你在这张棋盘的第一个格子里赏我一粒麦子;在第2个格子里赏我2粒麦子;在第3个格子里赏我4粒麦子;在第4个格子里赏我8粒麦子……依此类推直到100个格子,按这张棋盘上各格应赏的麦子全赏给我吧。

    国王听了,觉得贝贝的要求并不高,说道:你能如愿以偿的。然而,国王却不知道这个数字是多么巨大啊!你能帮助国王算算第n个格子的麦粒数量吗?

【输入格式】

    正整数n(n<101)。

【输出格式】

    第n个格子的麦粒数量,注意不能以科学记数法表示。

【输入输出样例】

输入

输出

样例1

  5

16

样例2

  40

549755813888

 




//program p5-03 第3课  贝贝与国王(king)

#include <bits/stdc++.h>
using namespace std;
//k进制 
void mul(int a[],int& lena,int k)
{
	//cout<<"lena="<<lena<<endl;
	for(int i=0;i<lena;++i)
	{
		//cout<<"01a["<<i<<"]="<<a[i]<<" k="<<k<<endl;
		a[i]*=k;
		//cout<<"02a["<<i<<"]="<<a[i]<<" k="<<k<<endl;
	}
	
	//处理 进位 
	for(int i=0;i<lena;++i)
	{
		a[i+1]+=a[i]/10;//a[i]整除10 
		a[i]%=10;
	}
	
	//如果最高位有进位,则乘以k后的长度lena增1 
	if( a[lena] )  
	{
		++lena;
		//cout<<"002lena="<<lena<<endl;
	}
	
	//去掉前导0 
	for(;lena>1 && a[lena-1]==0;--lena);
	//小作业:改成while循环 
	//cout<<"---------------------"<<endl;
	
}
const int maxL=200+10;
int a[maxL];
int n,lena;
int main( void )
{
	cin>>n;
	
	lena=1;
	a[0]=1;
	for(register int i=1;i<n;++i)
	{
	    mul(a,lena,2);	
	}
	
	//倒着输出 
	for(int i=lena-1;i>=0;--i)
	{
		cout<<a[i];
	}
	
	cout<<endl;
	
	return 0;
}
/*
作业:
 
1170:计算2的N次方
http://ybt.ssoier.cn:8088/problem_show.php?pid=1170

1.6编程基础之一维数组_12计算2的N次方
http://noi.openjudge.cn/ch0106/12/

信奥中的“骗”分神技 ---“打表”
https://blog.csdn.net/dllglvzhenfeng/article/details/122999964

1、多读

2、多写

3、多思考 
*/



12计算2的N次方 打表法 C++代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin>>n;
	if (n<=63)
	{
		long long x = 2;
		for (int i = 0;i < n-1;i++)
		{
			x *= 2;
		}
		cout << x;
	}
	else
	{
		switch (n)
		{
			case 64:
				cout<<"18446744073709551616";
				break;
			case 65:
				cout<<"36893488147419103232";
				break;
			case 66:
				cout<<"73786976294838206464";
				break;
			case 67:
				cout<<"147573952589676412928";
				break;
			case 68:
				cout<<"295147905179352825856";
				break;
			case 69:
				cout<<"590295810358705651712";
				break;
			case 70:
				cout<<"1180591620717411303424";
				break;
			case 71:
				cout<<"2361183241434822606848";
				break;
			case 72:
				cout<<"4722366482869645213696";
				break;
			case 73:
				cout<<"9444732965739290427392";
				break;
			case 74:
				cout<<"18889465931478580854784";
				break;
			case 75:
				cout<<"37778931862957161709568";
				break;
			case 76:
				cout<<"75557863725914323419136";
				break;
			case 77:
				cout<<"151115727451828646838272";
				break;	
			case 78:
				cout<<"302231454903657293676544";
				break;	
			case 79:
				cout<<"604462909807314587353088";
				break;
			case 80:
				cout<<"1208925819614629174706176";
				break;
			case 81:
				cout<<"2417851639229258349412352";
				break;
			case 82:
				cout<<"4835703278458516698824704";
				break;
			case 83:
				cout<<"9671406556917033397649408";
				break;
			case 84:
				cout<<"19342813113834066795298816";
				break;
			case 85:
				cout<<"38685626227668133590597632";
				break;
			case 86:
				cout<<"77371252455336267181195264";
				break;
			case 87:
				cout<<"154742504910672534362390528";
				break;
			case 88:
				cout<<"309485009821345068724781056";
				break;
			case 89:
				cout<<"618970019642690137449562112";
				break;
			case 90:
				cout<<"1237940039285380274899124224";
				break;
			case 91:
				cout<<"2475880078570760549798248448";
				break;
			case 92:
				cout<<"4951760157141521099596496896";
				break;
			case 93:
				cout<<"9903520314283042199192993792";
				break;
			case 94:
				cout<<"19807040628566084398385987584";
				break;
			case 95:
				cout<<"39614081257132168796771975168";
				break;
			case 96:
				cout<<"79228162514264337593543950336";
				break;
			case 97:
				cout<<"158456325028528675187087900672";
				break;
			case 98:
				cout<<"316912650057057350374175801344";
				break;
			case 99:
				cout<<"633825300114114700748351602688";
				break;
			case 100:
				cout<<"1267650600228229401496703205376";
				break;
		}
	}

	return 0;
}
/*
作业:
 
1170:计算2的N次方
http://ybt.ssoier.cn:8088/problem_show.php?pid=1170

1.6编程基础之一维数组_12计算2的N次方
http://noi.openjudge.cn/ch0106/12/

信奥中的“骗”分神技 ---“打表”
https://blog.csdn.net/dllglvzhenfeng/article/details/122999964
*/



信奥中的“骗”分神技 ---“打表”

信奥中的“骗”分神技 ---“打表”_打表出省一-CSDN博客



 1168:大整数加法

信息学奥赛一本通(C++版)在线评测系统

1.6编程基础之一维数组_10大整数加法

OpenJudge - 10:大整数加法

1169:大整数减法

信息学奥赛一本通(C++版)在线评测系统

1.6编程基础之一维数组_11大整数减法

OpenJudge - 11:大整数减法

1.6编程基础之一维数组

OpenJudge - OpenJudge - 题目

【例 1.6】回文数(Noip1999)

信息学奥赛一本通(C++版)在线评测系统

NOIP2003 普及组 第 4 题 P1045 麦森数(分治、高精度运算)

[NOIP2003 普及组] 麦森数 - 洛谷

NOIP2005 普及组 第 4 题 P1050 循环(高精度运算、数论、快速幂)

[NOIP2005 普及组] 循环 - 洛谷

1.6编程基础之一维数组_13大整数的因子

OpenJudge - 13:大整数的因子

 




 



 



 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dllglvzhenfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值