計(jì)算M的N次冪

當(dāng)指數(shù)非常大時(shí)候(比如1000,10000),直接調(diào)用C的庫函數(shù),會導(dǎo)致溢出。用此函數(shù)可正確計(jì)算指數(shù)結(jié)果,無論指數(shù)的數(shù)量級有多大(需正確給定相應(yīng)進(jìn)制的位數(shù)即ARRAY_LEN)。

/****
    *計(jì)算 M 的 N 次冪 M^^N,以C進(jìn)制呈現(xiàn)結(jié)果;(C < 256)
    */
#include <stdio.h>

#define M 2
#define N 9
#defien C 10
#define ARRAY_LEN (N / 3 + 1) //正確的長度是(logC(M))* N

int main()
{
    int array[ARRAY_LEN] = {0};
    int j = 0;
    array[ARRAY_LEN-1] = 1;

    for(j = 0; j < N; j++){
        int t = 0;
        for(int i = ARRAY_LEN-1; i > ARRAY_LEN - 1 - (j / 3 + 1) ; i--){
            int tmp = array[i] * M + t;
            array[i] = tmp % C;
            t = tmp/10;
        }
    }

    for( j = 0; j < ARRAY_LEN; j++){
          if( array[j] != 0)
            break;
    }

    for( ; j < ARRAY_LEN; j++){
        printf("%d",array[j]);
    }

    printf("\n");

    return 0;
}

完整實(shí)例圖如下:
2的9次冪:


2^^9.png

2的16次冪:


2^^16.png

2的10000次冪:
2^^10000

由于2的10000次冪結(jié)果太大,一般難以驗(yàn)證,為驗(yàn)證程序結(jié)果是否正確,調(diào)用了python自帶的(python的math庫和C的math庫中的pow函數(shù)都會溢出)指數(shù)函數(shù)pow(2, 10000);兩者結(jié)果截圖如下,可驗(yàn)證其正確性:
2^^10000.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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