求n的k次方 可转化为求10的log(n)*k次方
若只求前几位 则将10的整数次方略去 只求10的小数次方 后再添整
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
char str[222];
int powmod(int a, int b, int mod){
a%=mod;
int ret = 1;
while(b){
if(b&1) ret = ret*a%mod;
a = a*a%mod;
b>>=1;
}
return ret;
}
int powdiv(int a, int b){
double ans = pow(10, 2+fmod(log10(a)*b, 1));
sprintf(str, "%lf", ans);
int ret = (str[0]-'0')*100+(str[1]-'0')*10+(str[2]-'0');
return ret;
}
int main()
{
// freopen("data.in", "r", stdin);
int T, n, k;
scanf("%d", &T);
while(T--){
scanf("%d%d", &n, &k);
printf("%d...%03d\n", powdiv(n,k), powmod(n,k,1000));
}
return 0;
}
本文探讨了如何高效地求解任意数的幂次方运算,并通过结合对数与指数运算的数学原理,提供了求解前几位数字的方法。通过C++代码示例,展示了如何利用对数和指数的特性进行优化计算,适用于需要快速处理大量幂运算场景的需求。
291

被折叠的 条评论
为什么被折叠?



