Oiclass Q&A P2569

OiClass Q&A P2569

问题:

oiclassq&ap1problem.png

很显然这是一道很简单的问题(大水题),让我们来看看提问:

哪位兄台能告诉我哪里错了吗,输入输出符合要求的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
#include<math.h>
using namespace std;
int main(){
long long int sum,m,s,u,n;
cin>>m>>s;
for(int i=2;i<=m;i++){
sum=(pow(m,s));
}
u=sum%10;
n=sum%100/10;
cout<<n<<" "<<u;
return 0;
}

解答:

我们可以看到题目中的数据范围为N,K(2≤N,K≤100000000),稍微一算我们就能知道题目算法中sum的数值很容易就达到一亿的一亿次方算出来有多大大家不用脑子知道吧。就算用long long类型也绝对存不下。那要怎么办呢?

目光转向题目,我们可以很轻松的发现题目只需要后两位,也就是个位和十位,那么前面是什么对我们就完全不重要了,反而是后面两位需要保存好。既然只要后两位,那我就干脆把数值在乘方的过程中%100不就行了?所以这道题应该是

1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
using namespace std;
int n,k,power=1;
int main(){
cin>>n>>k;
for (int i=0; i < k; i++){
power *= n;
power %= 100;
}
cout<<power/10%10<<" "<<power%10;
}

而不是向前面提问的老哥那样直接用cmath库求n的k次方,方法应该没错,试提交一下。

AC!!!


Oiclass Q&A P2569
https://lixuannan.github.io/posts/25835
作者
CodingCow Lee
发布于
2022年8月4日
许可协议