用C语言编写一段程序题目是输入格式 输入的第一行包含一个整数n;第二行包含一个整数m,第三行包含一个整数k。 数据规模和约定 对于100%的数据,n在十进制下不超过1000位,即1≤n< 10^1000,1≤k≤1000,同时0≤m≤n,k≤n。 提示 999101是一个质数; 当n位数比较多时,绝大多数情况下答案都是0,但评测的时候会选取一些答案不是0的数据; 输出格式 计算上面公式的值,由于答案非常大,请输出这个值除以999101的余数。
时间: 2024-02-20 21:59:07 浏览: 73
以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MOD 999101
// 大数取模
int mod(char* x, int m) {
int res = 0;
for (int i = 0; i < strlen(x); i++) {
res = (res * 10 + (x[i] - '0')) % m;
}
return res;
}
// 快速幂
int quick_pow(int a, int n, int m) {
int res = 1;
while (n) {
if (n & 1) {
res = (res * a) % m;
}
a = (a * a) % m;
n >>= 1;
}
return res;
}
int main() {
char n[1005];
int m, k;
scanf("%s%d%d", n, &m, &k);
int a = mod(n, MOD);
int b = quick_pow(10, k, MOD);
int c = quick_pow(b, m, MOD);
int ans = (a * c) % MOD;
printf("%d\n", ans);
return 0;
}
```
首先,我们使用了字符数组来读入n,然后使用mod函数将其转化为整数,并进行取模运算。对于m和k,直接使用scanf函数读入即可。
然后,我们使用quick_pow函数计算出b的m次方,并使用mod函数将a和c进行取模运算。最后输出结果即可。
需要注意的是,由于n的位数非常大,我们无法使用long long类型进行取模运算,因此需要使用字符数组和字符串读入的方式来解决。
阅读全文