ACM,该如何解决
ACM
上初中的时候我们就学会了幂乘运算,可是我们却不知道对于高阶的幂乘,出结果的方法比较慢,那么你有什么更好的方法吗?
Input
第1行,一个整数N(1<=N<=1000),表示要计算的数据组数
第2-N+1行,每行两个整数,第1个是x(1<=x<=100),表示底数,第2个是y(0<=y<=10000000),表示指数。
Output
对于每一组输入的数据给出幂乘的结果x^y(x的y次方),由于结果可能非常大,要求对99991取余。
Sample Input
Original
Transformed
3
2 3
5 10
3 0
Sample Output
Original
Transformed
8
66498
1
程序如下
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
long int n,s,i,j,p,q,m[1000];
cin>>n;
for(i=0;i<n;i++)
{
cin>>p>>q;
if(p>=1&&p<=100&&q>=0&&q<=10000000)
{
s=pow(p,q);
s=s%99991;
m[i]=s;
}
}
for(i=0;i<n-1;i++)
cout<<m[i]<<endl;
cout<<m[n-1];
return 0;
}
为什么是wrong answer
------解决方案--------------------
损失精度
double能表示的一些数 int存储不了
------解决方案--------------------
在这里不能用POW(),整数运算不用POW,直接进行Y次乘法,为防止溢出,每乘一次都和99991比一下,大的时侯先MOD一下,再乘
上初中的时候我们就学会了幂乘运算,可是我们却不知道对于高阶的幂乘,出结果的方法比较慢,那么你有什么更好的方法吗?
Input
第1行,一个整数N(1<=N<=1000),表示要计算的数据组数
第2-N+1行,每行两个整数,第1个是x(1<=x<=100),表示底数,第2个是y(0<=y<=10000000),表示指数。
Output
对于每一组输入的数据给出幂乘的结果x^y(x的y次方),由于结果可能非常大,要求对99991取余。
Sample Input
Original
Transformed
3
2 3
5 10
3 0
Sample Output
Original
Transformed
8
66498
1
程序如下
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
long int n,s,i,j,p,q,m[1000];
cin>>n;
for(i=0;i<n;i++)
{
cin>>p>>q;
if(p>=1&&p<=100&&q>=0&&q<=10000000)
{
s=pow(p,q);
s=s%99991;
m[i]=s;
}
}
for(i=0;i<n-1;i++)
cout<<m[i]<<endl;
cout<<m[n-1];
return 0;
}
为什么是wrong answer
C++
------解决方案--------------------
损失精度
double能表示的一些数 int存储不了
------解决方案--------------------
在这里不能用POW(),整数运算不用POW,直接进行Y次乘法,为防止溢出,每乘一次都和99991比一下,大的时侯先MOD一下,再乘