C语言中如何算2的N次方

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中如何算2的N次方相关的知识,希望对你有一定的参考价值。

#include <stdio.h>

#include<math.h>

int main()

    int n;

    unsigned long long sum;

    printf("请输入要计算的N此方:");

    scanf("%d",&n);

    sum=pow(2,n);

    printf("%llu",sum);

    return 0;

扩展资料:

在C语言家族程序中,头文件被大量使用。一般而言,每个C++/C程序通常由头文件和定义文件组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现。

头文件一般由四部分内容组成:

1,头文件开头处的版权和版本声明。

2,预处理块。

3,inline函数的定义。

4,函数和类结构声明等。

在头文件中,用 ifndef/define/endif结构产生预处理块,用 #include 格式来引用库的头文件。头文件的这种结构,是利用C语言进行开发软件所通常具备的,属于公有知识。


参考技术A

完整代码如下:

#include <stdio.h>

int main(int argc, char **argv)

    unsigned long long result = 1;
    int cnt;

    if (argc != 2) 
        return -1;
    

    cnt = atoi(argv[1]);
    if (cnt < 0) 
        return -1;
    

    printf("cnt=%d\\n", cnt);

    while (cnt) 
        result *= 2;

        if ((result - 2) > ((unsigned long long)-1 / 2)) 
            printf("result out of range! result:%llu range:%llu\\n", result, (unsigned long long)-1 / 2);
            return -1;
        

        cnt--;
    

    printf("result = %llu\\n", result);

    return 0;


通过输入参数计算2的N次方,如./exe 10,表示计算2的10次方结果。

PS:最多计算到2的63次方,因为unsigned long long 8字节64位,不能超过它的最大值。

参考技术B 有特定的库函数的,#include <math.h>
pow(2,n);
2的n次方。

这个函数写起来也很简单的。
int pow(int x,int y)

int i;
for(i=0;i<y;i++)
x*=x;
return x;

参考技术C void main()

int i;
int n;
long s=1;
printf("请输入n的值:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)

s*=2;

printf("2的%d次方的值为%ld\n",n,s);
追问

我这样试过,但是当n=100次就错了我用的还是unsigned long long 类型呢

追答

long型是32个字节,你用100的话就超出范围了!算一下2的32次方是多大,然后如果是100次方得话就超出范围了!

参考技术D 左移N次,就是2的N次方

计算1!+2!+3!...+(n-1)!+n!。设计求解该问题的C语言程序,阶乘的计算使用递归函数实现

程序运行后输入n,当n=5时输出结果如下图所示

用递归并不是很好,每次递归调用都要有一定的时间和空间的开销,当n不大时还可以,当n大到一定程度就会出现堆栈溢出,程序崩溃。
作为练习或是算法描述是可以的。
该问题如果不用递归算法实现阶乘可以做的更有效率。

递归算法:

#include<iostream>
using namespace std;

long int fun(int n)

if(n==1)return 1;
return ((long int)n)*fun(n-1);


int main()

long int S=0;
int n;
cout<<"请输入一个正整数"<<endl;
cin>>n;
for(int =1;i<=n;i++)
S+=fun(i);

cout<<"S="<<S<<endl;


非递归算法

#include <iostream>
using namespace std;

int main()

long int S;
long int T=1;
int n;
cout<<"请输入一个正整数"<<endl;
cin>>n;
for(int i=1;i<=n;i++)
T=(long int)i*T;
S=S+T;

cout<<"S="<<S<<endl;
参考技术A #include <stdio.h>
#include <stdlib.h>
fun(int x);
int main(void)

char *pszBuff = NULL;
int a;
int i=1;
int sumResult = 0;
printf("input a int number::");
scanf("%d", &a);
for(i=1;i<=a;i++)

int tmp = fun(i);
sumResult = sumResult + tmp ;
printf("%d!=%d, 1-%d的阶乘的和为%d\n",i,tmp,sumResult );

return 0;

int fun(int x)

int ret;
if(x == 1) return 1;
ret = fun(x-1)*x;
return ret;
本回答被提问者采纳
参考技术B #include<stdio.h>
void main()

int n,i,j;
long num=1,sum=0;
printf("input a int number::");
scanf("%d",&n);
for(i=1;i<=n;i++)

for(j=1;j<=i;j++)

num*=j;
sum+=num;

printf("%d!=%d, 1-%d的阶乘的和为%d\n",i,num,i,sum);
num=1;
sum=0;

参考技术C #include <stdio.h>
int jiecheng(int x)

int sum=1;
int i;
for(i=1;i<=x;i++)
sum=sum*i;
return sum;


main()

int n,i,j,sum=0;
printf("求阶乘\n");
printf("请输入一个数N:N<10\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
printf("%d!的阶乘为%d ",i,jiecheng(i));
for(j=1;j<=i;j++)
sum=sum+jiecheng(j);
printf(" 1-%d!的阶乘和为%d\n",i,sum);
sum=0;


以上是关于C语言中如何算2的N次方的主要内容,如果未能解决你的问题,请参考以下文章

c语言中2的次方怎么写怎么表示?

如何用C语言实现2的n次方

计算1!+2!+3!...+(n-1)!+n!。设计求解该问题的C语言程序,阶乘的计算使用递归函数实现

c语言中2的n次方怎么表示

c语言:输入是一个n*m的矩阵,要求找到其中最大的全0字矩阵。怎么算?

编个程序:题目是“2的n次方”。就是当用户输入n时程序自动算出“2的n次方”