只有耐心看的人才能得到大礼!!!
4728. 乘方
小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 $a$ 和 $b$,求 $a^b$ 的值是多少。
$a^b$ 即 $b$ 个 $a$ 相乘的值,例如 $2^3$ 即为 $3$ 个 $2$ 相乘,结果为 2×2×2=8。
“简单!”小文心想,同时很快就写出了一份程序,可是测试时却出现了错误。
小文很快意识到,她的程序里的变量都是 int 类型的。
在大多数机器上,int 类型能表示的最大数为 $2^{31}−1$,因此只要计算结果超过这个数,她的程序就会出现错误。
由于小文刚刚学会编程,她担心使用 int 计算会出现问题。
因此她希望你在 $a^b$ 的值超过 $10^9$ 时,输出一个 $-1$ 进行警示,否则就输出正确的 $a^b$ 的值。
然而小文还是不知道怎么实现这份程序,因此她想请你帮忙。
输入格式
输入共一行,两个正整数 $a$, $b$。
输出格式
输出共一行,如果 $a^b$ 的值不超过 $10^9$,则输出 $a^b$ 的值,否则输出 $-1$。
数据范围
对于 $10\%$ 的数据,保证 $b=1$。
对于 $30\%$ 的数据,保证 $b≤2$。
对于 $60\%$ 的数据,保证 $b≤30$,$a^b≤10^18$。
对于 $100\%$ 的数据,保证 $1≤a,b≤10^9$。
输入样例1:
10 9
输出样例1:
1000000000
输入样例2:
23333 66666
输出样例2:
‐1
$ $
主要思路
方法一
这题我认为很简单吧,直接快速幂就过了。。。
#include <bits/stdc++.h>
using namespace std;
long long quickpow(long long a, long long b) {
long long res = 1;
while (b) {
if (b & 1) {
res = res * a;
}
a *= a;
b >>= 1;
if (res > 1e9) return -1;
if (res < 0) return -1; // 注意:此期间可能会爆 long long !!!
}
return res;
}
int main() {
long long a, b;
cin >> a >> b;
cout << quickpow(a, b) << endl;
return 0;
}
方法二
试了一下,想吐血。。。
竟然直接用 pow 也能过!!!
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if (pow(a, b) > 1e9) cout << -1;
else cout << (int)ans;
return 0;
}
好了,是不是很简单啊,如果有什么不懂或我说错的地方都可以在评论区里指出来哦!
等等。。。点个赞呗。。。
大礼
https://www.acwing.com/file_system/gui/taskbar/widgets/clock/calendar/send/220947/10/5bb6eb5b/
https://www.acwing.com/file_system/gui/taskbar/widgets/clock/calendar/send/220947/2/ccf45c8b/
https://www.acwing.com/file_system/gui/taskbar/widgets/clock/calendar/send/220947/6/ca690e5b/
https://www.acwing.com/file_system/gui/taskbar/widgets/clock/calendar/send/220947/2/6cdd20e4/
https://www.acwing.com/file_system/gui/taskbar/widgets/clock/calendar/send/220947/4/fe48762e/
https://www.acwing.com/file_system/gui/taskbar/widgets/clock/calendar/send/220947/9/3b265694/
https://www.acwing.com/file_system/gui/taskbar/widgets/clock/calendar/send/220947/11/a286b27e/
大佬们不能光抢啊,点个赞再走呗
大佬有多余的3么 (捂
虽然没抢到,但还是给你点了赞。
还有pow这个函数,我都不知道。加一
私聊我送你哦
已赞,2+4