Project Euler Problem 63 (C++和 Python)

100 篇文章 3 订阅
87 篇文章 1 订阅

Problem 63 : Powerful digit counts

The 5-digit number, 16807=75, is also a fifth power. Similarly, the 9-digit number, 134217728=89, is a ninth power.

How many n-digit positive integers exist which are also an nth power?

C++ 代码

#include <iostream>
#include <vector>
#include <iterator>

using namespace std;

//#define UNIT_TEST

class PE0063
{
private:
    const static int max_digits = 1000; // 10^100 
    int m_digitArray[max_digits]; 
    
    void adjustMyDigitArray(int digitArray[]);
    vector<int> getPowerDigits(int a, int b);

public:
    int getNumOfnthPowerIntegers();
};


void PE0063::adjustMyDigitArray(int digitArray[])
{        
    for(int j=0; j<max_digits-1; j++)
    {
        digitArray[j+1] += digitArray[j]/10;
        digitArray[j]   %= 10;
    }
}
    
vector<int> PE0063::getPowerDigits(int a, int b)  // a^b
{
    for(int j=0; j<max_digits; j++)
    {
        m_digitArray[j] = 0;
    }

    m_digitArray[0] = 1;
    for(int i=1; i<=b; i++)
    {
        for(int j=0; j<max_digits; j++)
        {
            m_digitArray[j] *= a; 
        }
    
        adjustMyDigitArray(m_digitArray);
    }

    int j;
    for (j=max_digits-1; j>=0 && m_digitArray[j]==0; j--)
    {
    }

    vector<int> digits_vec(j+1);
    for (int i=0; i<=j;i++)
    {
        digits_vec[i] = m_digitArray[i];
    }

    return digits_vec;
}

int PE0063::getNumOfnthPowerIntegers()
{
    int num_of_nth_power_integers = 0;

    for (int y=1; y<100; y++)
    {
        for(int x=1; x<10; x++)
        {
            vector<int> digits_vec = getPowerDigits(x, y);
            if (y == digits_vec.size())
            {
                num_of_nth_power_integers++;
#ifdef UNIT_TEST
                copy(digits_vec.rbegin(), digits_vec.rend(), 
                     ostream_iterator<int>(cout));
                cout << " = " << x << "^" << y << endl;
#endif
            }
        }
    }

    return num_of_nth_power_integers;
}

int main()
{
    PE0063 pe0063;

    cout << pe0063.getNumOfnthPowerIntegers() << " n-digit positive";
    cout << " integers exist which are also an nth power." << endl;

    return 0;
}

Python 代码

def count_nth_power_integer():
    nth_power_list = []
    for a in range(1, 10):
        for b in range(1, 30):
            n = a**b
            if len(str(n)) == b:
                #print(n,"=", a, "^", b)
                nth_power_list += [n]
    return nth_power_list
    
def main():
    nth_power_list = count_nth_power_integer()

    print(len(nth_power_list), "n-digit positive integers exist", end=' ')
    print("which are also an nth power.")

if  __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值