原本想这样模拟过程但是这样太复杂。需要思考别的方法~
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
bool Judge(vector<int> n, int k){
int len = n.size();
if(len > 2){
return false;
}else if(len == 2){
if()
}
}
vector<int> n root(vector<int> n, int k){
int n1 = 0;
int len = n.size();
if(len > 2 ){
return root(n1, k);
}else if(len == 2){
if()
}
}
vector<int> getNum(int x){
vector<int> ans;
while(x != 0){
ans.push_back(x % 10);
x /= 10;
}
return ans;
}
vector<int> Multiply(vector<int> x, vector<int> y){
int m = x.size(), n = y.size();
vector<int> ans(m + n, 0);
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
ans[i+j] = x[i] * y[j];
}
}
for(int i = 0; i < m + n + 2; i++){
if(ans[i] >= 10){
ans[i+1] += ans[i] / 10;
ans[i] %= 10;
}
}
return ans;
}
vector<int> FastExponentiation(vector<int> x, vector<int> y){
}
int main(){
int x, y, k;
while(cin >> x >> y >> k){
vector<int> product, num1, num2;
num1 = getNum(x);
num2 = getNum(y);
product = Multiply(num1, num2);
}
}
通过的答案
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
//这里要用longlongint,只用int结果会出错,还不知道原因。
int func(long long int x, long long int y, int k){
int ans = 1;
while(y > 0){
if(y % 2 ==1){
ans = (ans * x) % k;
}
x = (x*x)%k;
y /= 2;
}
return ans;
}
int main(){
int x, y, k;
while(cin >> x >> y >> k){
int ans = func(x, y, k-1);//要注意模是k-1,而不是k
if(ans == 0){
cout << k-1 << endl;
}else{
cout << ans << endl;;
}
}
return 0;
}

京公网安备 11010502036488号