2025年4月天梯赛L1——7 大幂数

目录

一、想法及见解

二、代码实现


一、想法及见解

1.根据题目形式,有两个东西在变,底数和指数,所以我就想到了双重循环。

2.如果用python就不用顾虑定义变量时的内存占用情况,所以用c/c++时(尤其对于我还不太了解容器vector)要注意变量的大小。例如(1)a[100000] 是试出来的,(2)2<n<2^31,所以定义n的时候要大一点,同时指数部分也从这里得知循环次数,小于31。

3.flag的使用,本想着以flag的0,1来得知有无大幂数,但是忽略了会有多种情况的问题,91就有两个结果,所以就用flag>=1来判断,为什么是>=1?如果n有一种结果,这次循环找到了,而往后的循环没有了,flag便为0,就无法用flag==1来判断输出部分。

4.本人码龄不足一年,希望这些对你有所帮助,如果我有什么误解,请见谅。

二、代码实现

#include <iostream>
#include <math.h>
using namespace std;

int main()
{
    long long n = 0; // 定义变量 n 存储输入的正整数
    int a[100000] = {0}; // 定义数组 a 存储从 1 到 100000 的自然数
    int i = 0, j = 0, count = 0, m = 0; // 定义循环变量和计数器
    int flag = 0; // 标志变量,用于标记是否找到符合条件的幂次和

    // 初始化数组 a,使其存储从 1 到 100000 的自然数
    for (i = 0; i < 100000; i++)
        a[i] = i + 1;

    cin >> n; // 读取输入的正整数 n

    // 遍历幂次从 1 到 30
    for (i = 1; i < 31; i++) // 次方
    {
        long long s = 0; // 定义变量 s 存储当前幂次和
        // 遍历自然数序列
        for (j = 0; j < n; j++)
        {
            s += pow(a[j], i); // 计算当前自然数的 i 次幂并累加到 s
            if (s == n) // 如果当前幂次和等于 n
            {
                flag += 1; // 设置标志变量为 1 表示找到了一个解
                count = j; // 记录最后一个使用的自然数的索引
                m = i; // 记录当前幂次
                break; // 跳出内层循环
            }
            if (s > n) // 如果当前幂次和大于 n
            {
                break; // 跳出内层循环
            }
        }
    }

    if (flag >= 1) // 如果找到了至少一个解
    {
        // 输出找到的幂次和表示形式
        for (j = 0; j < count; j++)
        {
            cout << a[j]; // 输出当前自然数
            cout << '^'; // 输出幂符号
            cout << m; // 输出幂次
            cout << '+'; // 输出加号
        }
        cout << a[count] << '^' << m; // 输出最后一个自然数及其幂次
    }
    else
    {
        cout << "Impossible for " << n << '.'; // 如果没有找到解,输出提示信息
    }

    return 0;
}



代码不一定是最简单的解法,如果您有令解,请留言,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值