题目描述
输入两个数 a, b,其中 b 极大。计算 a 的 b 次方对 1337 取模的结果。数据保证 a 在 int 范围内,b 小于 100 位。
输入描述
每个样例输入两行分别表示 a 和 b。
输出描述
每个样例输出一行表示:a 的 b 次方对 1337 取模的结果。
样例输入
2
3
样例输出
8
代码如下
#include<bits/stdc++.h>
using namespace std;
#define MAX 100
void fun(int* B);
int main() {
int a;
string b;
while (cin >> a >> b)
{
int* B = new int[b.length() + 1];
B[0] = b.length();
for (int i = b.length(); i > 0; i--)
{
B[i] = b[b.length() - i] - '0';
}
int mul = 1;
while (!(B[0] == 1 && B[1] == 0))
{
fun(B);
mul = (mul * (a % 1337)) % 1337;
}
cout << mul % 1337 << endl;
}
return 0;
}
void fun(int* B) {
int CO = 0;
if (B[1] - 1 >= 0)
{
B[1]--; return;
}
else {
B[1] = B[1] - 1 + 10;
int CO = 1;
int i = 1;
while (CO != 0)
{
i++;
if (B[i] - CO >= 0) {
CO = 0;
B[i]--;
if (i == B[0] && B[i] == 0) {
B[0]--;
}
}
else
{
B[i] = B[i] - 1 + 10;
CO = 1;
}
}
}
}