语法基础课数组练习题
作者:
淮南之橘丶
,
2021-05-14 11:10:48
,
所有人可见
,
阅读 418
看一天才理解。。
#include<bits/stdc++.h>
using namespace std;
const int N=3010;//定义数组长度为3010,因为2^N大约为3000位。(当N<=10000时,其最大位数为N*lg2差不读等于3000)
//const,表示定义的这个这个为常量不可改只可读
int main()
{
int a[N] = {1};//表示这个数组a[0]=1,其余为0。第一位2的0次方为1
int n;
cin>>n;
int m =1;//当前有多少位数
for(int i =0;i<n;i++)//2的n次幂,有n次循环n遍
{
int t=0;
for (int j=0;j<m;j++)//有多少位数,即有多少个数与2相乘。
{
t=a[j]*2+t;
//先用t存当前位数×2+t的结果,+t是指加上前一位是否进位,进位即加1,无进为则加0。
a[j] = t%10;
//当前位数的数是几,列如t存下来为12,当前位数就为2
t=t/10;
//判断有无进位,如12/10=1,进一位。留给下次循环开始t=a[j]*2+t时加。
}
if(t==1) a[m++] =1;
//最后判断最高位×2之后有无进位,如果有进位则位数加一。
//列如64×2,t=6×2,t/10=1,需要进一位,从之前的二位数64,变为三位数128
}
for (int i =m-1;i>=0;i--)
cout<<a[i];
//从最高位开始输出。
return 0;
}
我也是看视频没搞懂变量的含义,感谢xd的注释