洛谷P8813 乘方 题解

题意简述

输入两个数 aabbaba^b (特判:若 求 aba^b 大于 10910^9 则输出 1-1 )

算法简述

先把 ansans 设为1( a0a^0 永远等于 11 )

再使用 for 循环 bbans=ans*a 和特判

代码

50分

#include <iostream>
#include <cstring>
#define MAX 1000000000
using namespace std;
long long a,b,ans=1;
int main()
{
	scanf("%lld%lld",&a,&b);//输入
	for(long long i=1;i<=b;i++)ans=ans*a;//计算
    if(ans>MAX) printf("-1");//特判
	else printf("%lld",ans);//输出
	return 0;
}

由于在输出时再特判,可能会超时或答案溢出。所以只能得50分。

100分

#include <iostream>
#include <cstring>
#define MAX 1000000000
using namespace std;
long long a,b,ans=1;
int main()
{
	scanf("%lld%lld",&a,&b);
	for(long long i=1;i<=b;i++)
	{
		ans=ans*a;
		if(ans>MAX)
		{
			printf("-1");
			return 0;
		}
	}
	printf("%lld",ans);
	return 0;
}

由于100分代码边循环便特判,所以不会会超时或答案溢出。所以得100分。

若有问题,欢迎指出