美文网首页
C语言求2的n次方

C语言求2的n次方

作者: 863cda997e42 | 来源:发表于2021-12-10 11:02 被阅读0次

C语言求2的n次方。
计算机整数的范围最大是 0~2^64-1。
如果计算2的100次方,使用浮点数将损失结果的精度。
可以将全部结果存储在数组中。
下面是具体的实现:

//
//  main.c
//  2n
//
//  Created by cc on 2021/12/10.
//

#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 2000
#define MOD 1000000000
#define MOD_LENGH 9

int result[MAX_LENGTH];
//计算2的n次方,返回结果的位数
int powers_2(int n);
int main(int argc, const char * argv[]) {

    int n = 100;
    int i;
    int length;

    for (i = 1; i <= n; i++) {
        printf("2^%d = ", i);
        length = powers_2(i);
        printf("len = %d\n\n", length);
    }
    printf("\n");
    return 0;
}

//计算结果有多少位
int results_length(int *a, int n){
    int length = 0;
    int first = a[n];
//    printf("\n");
    length = 0;
    while (first) {
        length++;
        first /= 10;
    }
    length += n * MOD_LENGH;
    return length;
}

//输出计算结果
void print_results(int *a, int n){
    int i = n;
    printf("%d", a[i]);
    for (i--; i>= 0; i--) {
        printf("%0*d", MOD_LENGH, a[i]);
    }
    printf("\n");
}

int powers_2(int n){
    memset(result, 0, MAX_LENGTH * sizeof(int));
    int index;//存储下标位置
    long carry;//进位
    long tempresult;//存储中间结果
    long i,j;
    int length;//长度
    result[0] = 1;
    index = 0;
    for (i = 1; i <= n; i++) {
        carry = 0;
        for (j = 0; j <= index; j++) {
            tempresult = result[j] * 2L + carry;
            carry = tempresult / MOD;
            result[j] = tempresult % MOD;
        }
        while (carry) {
            index++;
            result[index] = carry % MOD;
            carry /= MOD;
        }
    }
    print_results(result, index);
    length = results_length(result, index);
    return length;
}

下面的地址可以通过输入n的值直接查看结果:
计算2的n次方

相关文章

  • C语言求2的n次方

    C语言求2的n次方。计算机整数的范围最大是 0~2^64-1。如果计算2的100次方,使用浮点数将损失结果的精度。...

  • 每周一道算法题(三十九)

    本周题目难度级别"Medium",使用语言C 题目:本周题目又是造轮子,求x的n次方,即pow(x,n). 思路:...

  • C语言中的平方,开根号

    C语言中的平方 库函数表达方法,X的n次方pow(X,n)X 代表代入的n次方数值n 代表代入的n次方pow(...

  • Day4-作业

    读程序,总结程序的功能: 答:本题输出结果为2的20次方,其功能是求2的n次方(n=1~20) 改正:功能是求2的...

  • 【JS】小作业数学运算

    1.求2的n次方,n为输入 varn=parseInt(window.prompt('input')); vars...

  • 数组求2的n次方

    数据范围n<=10000;

  • 30个Python常用功能

    1、冒泡排序 2、计算x的n次方的方法 3、计算a*a + b*b + c*c + …… 4、计算阶乘n! 5、列...

  • 30种常用的Python实现

    1、冒泡排序 2、计算x的n次方的方法 3、计算aa + bb + c*c + …… 4、计算阶乘 n! 5、列出...

  • python-30个骚操作

    1、冒泡排序 2、计算x的n次方的方法 3、计算a*a + b*b + c*c + …… 4、计算阶乘n! 5、列...

  • 30 个Python代码实现的常用功能,精心整理版

    1、冒泡排序 2、计算x的n次方的方法 3、计算aa + bb + c*c + …… 4、计算阶乘 n! 5、列出...

网友评论

      本文标题:C语言求2的n次方

      本文链接:https://www.haomeiwen.com/subject/ynlcfrtx.html