您的位置:首页 > 其它

杭电 ACM 2035

2016-07-18 15:53 417 查看
New~ 欢迎参加2016多校联合训练的同学们~

人见人爱A^B

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 35082    Accepted Submission(s): 23801


[align=left]Problem Description[/align]

求A^B的最后三位数表示的整数。
说明:A^B的含义是“A的B次方”

 

[align=left]Input[/align]
输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B<=10000),如果A=0, B=0,则表示输入数据的结束,不做处理。
 

[align=left]Output[/align]
对于每个测试实例,请输出A^B的最后三位表示的整数,每个输出占一行。

 

[align=left]Sample Input[/align]
[align=left]2 3[/align]
[align=left]12 6[/align]
[align=left]6789 10000 [/align]
[align=left]
[/align]
[align=left]
[/align]

[align=left]Sample Output[/align]
[align=left]8[/align]
[align=left]984[/align]
[align=left]1[/align]
[align=left]
[/align]
[align=left]解题思路:刚开始我使用了二分制法来解决这个题目,但是WA了。到后来使用long 来代替int 倒是AC,,,[/align]
[align=left]二分制法:pow(a,b/2)*pow(a,b/2)=pow(a,b);[/align]
                pow(a,b/4)*pow(a,b/4)=pow(a,b/2);
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int a,b,k,sum;
while(cin>>a>>b && (a != 0 || b != 0))
{
int x[12] = {0,a,pow(a,2),pow(a,4),pow(a,8),pow(a,16),pow(a,32),pow(a,64),pow(a,128),pow(a,256),pow(a,512),pow(a,1024)};
sum = 1;
k = 0;
while(b != 0)
{
k++;
if(b % 2 == 1)
{
sum *= x[k];
sum %= 1000;
}
b /= 2;
}
cout<<sum<<endl;
}
return 0;
}


以下代码是AC的:
#include<iostream>
using namespace std;
int main()
{
int a,b;
long sum;
while(cin>>a>>b && (a != 0 || b != 0))
{
sum = 1;
while(b--)
{
sum *= a;
sum %= 1000;
}
cout<<sum<<endl;
}
return 0;
}


[align=left]
[/align]
[align=left]
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: