解题思路:
注意事项:
参考代码:
//两种方法,但具体本质都未变,
// 方法1先整体乘2,不管是否进位
#include<stdio.h>
int a[100010];//数组是否初始化为0无影响,因为每次都是令a[1]为1并开始乘法
int main()
{
int n,len=1;//len记录当前数的长度,如128,长度为3,包含1,2,8
scanf("%d",&n);
a[1]=1;
for(int i=0;i<n;i++)//第一层for循环为乘2的次数
{
for(int i=1;i<=len;i++)//这层for循环遍历数的每一位,先保存结果
a[i]=a[i] * 2;
for(int i=1;i<=len;i++)//该层for循环用来判断保存的结果是否超过10,同时
//该层for循环必须不能超出最外层的for循环,否则进位结果不能及时判断
if(a[i] > 9)
{
a[i+1] += a[i] /10;//如16中的第二位变成2后,该操作使得2+1=3
a[i] = a[i] % 10;
if(i == len )//是否进位的判断条件
len++;
}
}
for(int i=len;i>=1;i--)//依次输出
printf("%d",a[i]);
return 0;
}
//2.
#include<stdio.h>
int a[1000010];
int main()
{
int n,len=1;
scanf("%d",&n);
a[1]=1;
for(int i=1;i<=n;i++)
{
int x= 0;//这里定义x=0;保证下面每个整数过程x的不变性
for(int j=1;j<=len;j++)
{
a[j] = a[j] * 2 + x;//该方法通过x在0和1之间的变化来判断是否进位
x = a[j] / 10;
a[j] = a[j] % 10;
if(x != 0 & j == len)
len ++;
}
}
for(int i=len;i >= 1;i--)
printf("%d",a[i]);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复