溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

高效查找自冪數(shù)

發(fā)布時(shí)間:2020-08-05 14:57:49 來源:網(wǎng)絡(luò) 閱讀:1285 作者:匯天下豪杰 欄目:編程語言

1、問題描述

  自冪數(shù):一個(gè)n位數(shù),每個(gè)位上的數(shù)字的n次方之和等于它本身的數(shù)字;

  例:153 = 3^3 + 5^3 + 1 ^3,就為自冪數(shù);


2、代碼實(shí)現(xiàn)

#include<stdio.h>

    const int table[][10] = {   //table[3][6]代表:6的3次方,做一張表直接查詢,效率比較高;
       // 0 1 2 3 4 5 6 7 8 9
/*0次方*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
/*1次方*/ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
/*2次方*/ 0, 1, 2*2, 3*3, 4*4, 5*5, 6*6, 7*7, 8*8, 9*9,
/*3次方*/ 0, 1, 2*2*2, 3*3*3, 4*4*4, 5*5*5, 6*6*6, 7*7*7, 8*8*8, 9*9*9,
/*4次方*/ 0, 1, 2*2*2*2, 3*3*3*3, 4*4*4*4, 5*5*5*5, 6*6*6*6, 7*7*7*7, 8*8*8*8, 9*9*9*9,
/*5次方*/ 0, 1, 2*2*2*2*2, 3*3*3*3*3, 4*4*4*4*4, 5*5*5*5*5, 6*6*6*6*6, 7*7*7*7*7, 8*8*8*8*8, 9*9*9*9*9,
/*6次方*/ 0, 1, 2*2*2*2*2*2, 3*3*3*3*3*3, 4*4*4*4*4*4, 5*5*5*5*5*5, 6*6*6*6*6*6, 7*7*7*7*7*7, 8*8*8*8*8*8, 9*9*9*9*9*9,
/*7次方*/ 0, 1, 2*2*2*2*2*2*2, 3*3*3*3*3*3*3, 4*4*4*4*4*4*4, 5*5*5*5*5*5*5, 6*6*6*6*6*6*6, 7*7*7*7*7*7*7, 8*8*8*8*8*8*8, 9*9*9*9*9*9*9,
/*8次方*/ 0, 1, 2*2*2*2*2*2*2*2, 3*3*3*3*3*3*3*3, 4*4*4*4*4*4*4*4, 5*5*5*5*5*5*5*5, 6*6*6*6*6*6*6*6, 7*7*7*7*7*7*7*7, 8*8*8*8*8*8*8*8, 9*9*9*9*9*9*9*9,
/*9次方*/ 0, 1, 2*2*2*2*2*2*2*2*2, 3*3*3*3*3*3*3*3*3, 4*4*4*4*4*4*4*4*4, 5*5*5*5*5*5*5*5*5, 6*6*6*6*6*6*6*6*6, 7*7*7*7*7*7*7*7*7, 8*8*8*8*8*8*8*8*8, 9*9*9*9*9*9*9*9*9,
    };

void selfNumber(int num);
int selfLen(int num);

int selfLen(int num){
    if(num > 0 && num < 10){
        return 1;
    }else if(num > 10 && num < 100){
        return 2;
    }else if(num >100 && num < 1000){
        return 3;
    }else if(num > 1000 && num < 10000){
        return 4;
    }else if(num > 10000 && num < 100000){
        return 5;
    }else if(num > 100000 && num < 1000000){
        return 6;
    }else if(num > 1000000 && num < 10000000){
        return 7;
    }else if(num > 10000000 && num < 100000000){
        return 8;
    }else if(num > 100000000 && num < 1000000000){
        return 9;
    }

    return -1;
}

void selfNumber(int num){
    int n;
    int len = selfLen(num);
    int sum  =0;

    for(n = num; n; n/=10){
        sum += table[len][n%10]; //此處就是求每一位的n次冪的和,利用的就是在表中直接查詢的方法;
    }

    if(sum == num){
        printf("%d是自冪數(shù)\n", num);
    }
}

void main(void){
    int i;
    int count;

    printf("請(qǐng)輸出多少位以內(nèi)的自冪數(shù):");
    scanf("%d", &count);
    for(i = 0; i < count; i++){
        selfNumber(i);
    }

}

 

3、結(jié)果截圖

高效查找自冪數(shù)

 

4、算法分析

  是查表法,根本不用計(jì)算,再加上if...else if判斷幾位數(shù),效率非常的高效!!!


5、算法題:輸入一個(gè)大于100000,小于21億的一個(gè)整數(shù)n,要求輸出7^n的個(gè)位上的數(shù)字?

  (1)、算法分析:

高效查找自冪數(shù)

  (2)、代碼實(shí)現(xiàn)

#include<stdio.h>

void main(void){
    int value[] = {1, 7, 9, 3};
    int n;

    printf("請(qǐng)輸入7的n次方,n = ");
    scanf("%d", &n);

    printf("7^n的個(gè)位數(shù)為: %d\n", value[n%4]);
}

  (3)、結(jié)果截圖
高效查找自冪數(shù)




向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI