我是靠谱客的博主 拉长烧鹅,最近开发中收集的这篇文章主要介绍乘方(pow) CSP-J2022,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 a a a b b b,求 a b a^b ab 的值是多少。

a b a^b ab b b b a a a 相乘的值,例如 2 3 2^3 23 即为 3 3 3 2 2 2 相乘,结果为 2 × 2 × 2 = 8 2 times 2 times 2 = 8 2×2×2=8

“简单!”小文心想,同时很快就写出了一份程序,可是测试时却出现了错误。

小文很快意识到,她的程序里的变量都是 int 类型的。在大多数机器上,int 类型能表示的最大数为 2 31 − 1 2^{31} - 1 2311,因此只要计算结果超过这个数,她的程序就会出现错误。

由于小文刚刚学会编程,她担心使用 int 计算会出现问题。因此她希望你在 a b a^b ab 的值超过 10 9 {10}^9 109 时,输出一个 -1 进行警示,否则就输出正确的 a b a^b ab 的值。

然而小文还是不知道怎么实现这份程序,因此她想请你帮忙。

输入格式

输入共一行,两个正整数 a , b a, b a,b

输出格式

输出共一行,如果 a b a^b ab 的值不超过 10 9 {10}^9 109,则输出 a b a^b ab 的值,否则输出 -1

样例 #1

样例输入 #1

10 9

样例输出 #1

1000000000

样例 #2

样例输入 #2

23333 66666

样例输出 #2

-1

提示

对于 10 % 10 % 10% 的数据,保证 b = 1 b = 1 b=1
对于 30 % 30 % 30% 的数据,保证 b ≤ 2 b le 2 b2
对于 60 % 60 % 60% 的数据,保证 b ≤ 30 b le 30 b30 a b ≤ 10 18 a^b le {10}^{18} ab1018
对于 100 % 100 % 100% 的数据,保证 1 ≤ a , b ≤ 10 9 1 le a, b le {10}^9 1a,b109

算法解析

可以用循环模拟乘幂的计算过程,ans=pow(a,i),循环中加判断
判断:if(ans>109) printf(“-1”);
但是ans可能会爆int,所以微调一下
ans=pow(a,i-1);
if(ans>109/a) printf(“-1”);
这样就没问题了
洛谷自测AC记录

代码

#include<bits/stdc++.h>
using namespace std;
const int Max=pow(10,9);//pow(a,b)是乘方函数,在cmath库中,表示a的b次幂
int a,b,ans=1;
int main()
{
scanf("%d%d",&a,&b);//比赛建议用scanf()读入,不要忘记加上地址符&
for(int i=1;i<b;i++)
{
ans*=a;
if(ans>Max*1.0/a)
{
printf("-1");
return 0;
}
}
ans*=a;
printf("%d",ans);
return 0;
}

最后

以上就是拉长烧鹅为你收集整理的乘方(pow) CSP-J2022的全部内容,希望文章能够帮你解决乘方(pow) CSP-J2022所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部