首页 > 试题广场 >

2的n次方计算

[编程题]2的n次方计算
  • 热度指数:43430 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
不使用累计乘法的基础上,通过移位运算(<<)实现2的n次方的计算。

数据范围:

输入描述:
一行输入整数n(0 <= n < 31)。


输出描述:
输出对应的2的n次方的结果。
示例1

输入

2

输出

4
示例2

输入

10

输出

1024
#include<stdio.h>
int main()
{
    int n;
     int a=0;
    while(scanf("%d",&n)!=EOF)
    {
         a=(1<<n);
         printf("%d\n",a);
    }
    return 0;
}
发表于 2021-09-06 22:59:06 回复(0)
#include<stdio.h>
int main()
{
    int a,b;
    while( scanf("%d",&a)!=EOF)//循环判断
    {
    b=2<<a-1;//实质是二进制编码左移
    printf("%d\n",b);
    }
    return 0;
}

发表于 2021-07-06 22:18:08 回复(0)
while True:
    try:
        a = eval(input(""))
        print(1 <<a)
    except:
        break;

编辑于 2020-10-08 17:11:32 回复(0)

每左移就变为原来的2倍

import java.util.*;
public class Main
{
    public static void main(String [] args)
    {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextInt())
        {
            int n=sc.nextInt();
            int result=2<<(n-1);
            System.out.println(result);
        }
    }
}
发表于 2020-03-25 22:16:02 回复(0)
#include<stdio.h>
int main()
{
    int a=0;
    while(scanf("%d",&a)!=EOF)
    {
        printf("%.lf\n", pow(2,a));
    }
    return 0;
}
发表于 2020-08-09 18:36:48 回复(0)
一开始使用了math.h的pow函数,有个问题就是返回值为double,不能直接输出为int,必须要强制类型转换,否则数据就丢失了。
#include <stdio.h>
(737)#include <math.h>

int main(void){
    int num;
    while(scanf("%d",&num)!=EOF){
        printf("%d\n",(int)pow(2,num));
    }
    return 0;
}
后来受别人答案启发,可以直接将1向左移动n位,等于是2的n的次方了,对C的理解更深刻
#include <stdio.h>

int main(void){
    int num;
    while(scanf("%d",&num)!=EOF){
        printf("%d\n",1<<num);
    }
    return 0;
}


发表于 2020-03-21 17:16:30 回复(4)
#include<stdio.h>

int main()
{
    long long a=1,b;
    scanf("%lld",&b);
    printf("%lld",a<<b);
    
    return 0;
}

我觉得我这个思路更简单
发表于 2022-09-07 08:57:59 回复(1)
#include <stdio.h>
#include <math.h>
int main()
{
    double b;
    scanf("%lf",&b);
    double result=pow(2,b);
    printf("%.0lf",result);
    return 0;
}
发表于 2022-02-11 13:30:15 回复(0)
#include<stdio.h>
#include<stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    printf("%d\n",1<<n);
    return 0;
}
左移后,后面补0
1<<1-->10(二进制)-->2(十进制)
1<<2-->100-->4
1<<3-->1000-->3
发表于 2021-10-29 21:52:41 回复(0)
#include<stdio.h>
#include<math.h>
int main(){
    double n;
    while(scanf("%lf",&n)!=EOF){
        printf("%ld\n",(long)pow(2,n));
    }
    return 0;
}

发表于 2021-04-08 19:17:04 回复(3)
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;

    int s=1;
    while(n--)
    {
        s*=2;
    }
    cout<<s<<endl;
    return 0;
}
发表于 2024-03-29 22:44:57 回复(0)
//嘿嘿 开心  学到咯   1<<n 就是2进制翻n倍   
#include <iostream>
using namespace std;

int main() {
    int n;
    cin>>n;
    cout<<(1<<n);
   
}
发表于 2023-08-12 18:41:26 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n=in.nextInt();
        System.out.print(2<<(n-1));
    }
}
发表于 2023-06-21 17:34:19 回复(0)
#include <stdio.h>
int main()
{
    int data;
    scanf("%d",&data);
    printf("%d",2<<(data-1));
    return 0;
}

发表于 2022-08-11 16:52:51 回复(0)
#include<stdio.h>
int main()
{
    int n;
    int x=1;
    int ans=0;
  while(scanf("%d",&n)!=EOF)
  {
     ans=1<<n;
    printf("%d\n",ans);
  }
    return 0;
}

发表于 2022-05-12 11:19:59 回复(1)
每次遇到要输入两个的时候我就感觉很奇怪。
开始没有用hasNextInt去判断是否输入为int数字,测试看系统的输入为2 10,然后默认取第一个int n=2,导致输出错误。
发表于 2020-07-28 15:33:42 回复(1)
#include <stdio.h>
#include <math.h>

int main() {
    int a;
    scanf("%d", &a);
    int ret=pow(2, a);
    printf("%d",ret);
    return 0;
}

发表于 2024-04-19 20:16:23 回复(0)
#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d", &n);
    while (n >= 0 && n <=31)
    {
        int sum = 0;
        sum = 1 << n;
        printf("%d", sum);
        break;
    }
    return 0;
}

发表于 2024-03-23 20:49:52 回复(0)
#include <stdio.h>
#include<math.h>
int main() {
    int a,n;
    scanf("%d",&n);
    a=pow(2,n);
    printf("%d",a);
    return 0;
}
编辑于 2024-03-15 20:27:54 回复(0)
#include <stdio.h>

int main() {
    int n;
    scanf("%d",&n);//n为次方
    printf("%d",1<<n);//0001 左移一位  0010
    return 0;
}
编辑于 2024-03-09 15:33:49 回复(0)

问题信息

上传者:牛客309119号
难度:
152条回答 7147浏览

热门推荐

通过挑战的用户

查看代码