3 条题解
-
2
直接一个快速幂 非常的简单 由于题目要求输出后三位 直接对1000进行取模 最后判断前导0 输出即可 下面是两种较优的方案 再优化就是快读我也不会(0v0) (过了就是好代码)
#include <bits/stdc++.h> using namespace std; typedef long long LL; // 递归快速幂 // LL QuickPow(LL a, LL n, LL p) // { // if (a == 0) // return 1; // else if (n % 2 == 1) // return (QuickPow(a, n - 1, p) \* a) % p; // else // { // int temp = (QuickPow(a, n / 2, p)) % p; // return temp \* temp; // } // } // 循环快速幂 LL QuickPow(LL a, LL n, LL p) { int ans = 1; while (n) { if (n & 1) { ans = ((ans % p) \* (a % p)) % p; } a = (a % p \* a % p) % p; n >>= 1; } return ans % p; } int main() { LL a, n, p; cin >> a >> n >> p; p = 1000; int Q = QuickPow(a, n, p); if (Q < 100) { if (Q > 10) { cout << '0' << Q; return 0; } cout << "00" << Q; return 0; } cout << Q; return 0; }
-
1
太难了!没学高精度根本不会👎看了楼上题解,不会…… 这道题的数据范围极大,a的b次方 那么可以每乘一次b就取末三位,就可以达成第一步 他还要在前面补零!不要漏了! 代码如下#include<bits/stdc++.h> using namespace std; int main() { int a,b,c; cin>>a>>b; c=a; for(int i=2;i<=b;i++){ a=a*c; a%=1000; } if(a<100&&a>10){ cout<<0<<a; }else{ if(a<100&&a<10){ cout<<0<<0<<a; }else{ cout<<a; } } return 0; }
- 1
信息
- ID
- 31
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 125
- 已通过
- 24
- 上传者