a^b的问题

错误代码:

#include
#include
int main()
{
    int T;
    scanf("%d", &T);
    for (int i = 0;i < T;i++)
    {
        int a, b;
        scanf("%d%d", &a, &b);
        long long c = 0;
        long long d = 0;
        c =pow(a, b);
        d = c % 10000;
        printf("%04lld\n", d);
    }
    return 0;
}

错误原因:你的代码看起来主要是计算 a 的 b 次方,并输出结果的后四位数字。代码基本正确,但有一点需要注意:在计算 pow(a, b) 的时候,可能会得到浮点数,而你的 c 是用 long long 类型声明的,可能导致精度丢失。为了避免这个问题,可以考虑使用循环逐步计算 a 的 b 次方,而不是直接使用 pow 函数。

真确代码:

#include

long long power(int a, int b)
{
    long long result = 1;
    for (int i = 0; i < b; ++i)
    {
        result = (result * a) % 10000;
    }
    return result;
}

int main()
{
    int T;
    scanf("%d", &T);

    for (int i = 0; i < T; i++)
    {
        int a, b;
        scanf("%d %d", &a, &b);

        long long result = power(a, b);
        printf("%04lld\n", result);
    }

    return 0;
}
 

你可能感兴趣的:(算法,数据结构)