C語(yǔ)言求2的n次方

C語(yǔ)言求2的n次方。
計(jì)算機(jī)整數(shù)的范圍最大是 0~2^64-1。
如果計(jì)算2的100次方,使用浮點(diǎn)數(shù)將損失結(jié)果的精度。
可以將全部結(jié)果存儲(chǔ)在數(shù)組中。
下面是具體的實(shí)現(xiàn):

//
//  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];
//計(jì)算2的n次方,返回結(jié)果的位數(shù)
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;
}

//計(jì)算結(jié)果有多少位
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;
}

//輸出計(jì)算結(jié)果
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;//存儲(chǔ)下標(biāo)位置
    long carry;//進(jìn)位
    long tempresult;//存儲(chǔ)中間結(jié)果
    long i,j;
    int length;//長(zhǎng)度
    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;
}

下面的地址可以通過(guò)輸入n的值直接查看結(jié)果:
計(jì)算2的n次方

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容