解题思路:
注意事项:
参考代码:
//两种方法,但具体本质都未变,
// 方法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语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5275 |
哥德巴赫曾猜测 (C语言代码)浏览:2562 |
完数 (C语言代码)浏览:757 |
The 3n + 1 problem (C语言代码)浏览:603 |
用筛法求之N内的素数。 (C语言代码)浏览:711 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:587 |
上车人数 (C语言代码)浏览:753 |
JAM计数法 (C语言代码)浏览:721 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:751 |
A+B for Input-Output Practice (I) (C语言代码)浏览:599 |