Description
问题很简单,输入x,y,希望你给出x^y,如果答案超过10^9就输出"error!",详见样例。
Input
多组数据,以0,0结束。
每组数据包含一行,两个整数:x,y 以空格分开。
Output
每组数据一行,如果答案大于10^9输出"error!",否则输出"answer: z",z代表x^y.
Sample Input
1 10000000
2 29
2 30
10 0
0 0
Sample Output
answer: 1
answer: 536870912
error!
answer: 1
解题思路:
题意非常清楚,
1 while(y)
2 {
3 if(y&1)
4 res=res*x;
5 y>>=1;
6 x=x*x;
7 }
#include<iostream>
using namespace std;
const int B = 1000000000;
void fastPow(long long x,int y)//x^y
{
long long result = 1;
while(y!=0)
{
if(y&1)
result = x*result;
y >>= 1;
x = x*x;
}
if(result>B)
cout<<"error!"<<endl;
else
cout<<"answer: "<<result<<endl;
}
int main()
{
long long x;
int y;
while(cin>>x>>y)
{
if((x|y)==0)
break;
fastPow(x,y);
}
return 0;
}
最后欢迎大家访问我的个人网站: 1024s