1170:计算2的N次方
1.6编程基础之一维数组_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
*/
信奥中的“骗”分神技 ---“打表”
1168:大整数加法
1.6编程基础之一维数组_10大整数加法
1169:大整数减法
1.6编程基础之一维数组_11大整数减法
1.6编程基础之一维数组
【例 1.6】回文数(Noip1999)
NOIP2003 普及组 第 4 题 P1045 麦森数(分治、高精度运算)
NOIP2005 普及组 第 4 题 P1050 循环(高精度运算、数论、快速幂)
1.6编程基础之一维数组_13大整数的因子