更好优化#include<stdio.h> #include<math.h> int main() { long long n; long long m; while(scanf("%lld %d",&n,&m)!=EOF) { int a,i=0; int k=0; while(pow(m,i)-1<n) { i++; k++; } long long j; j=(n-pow(m,k-1))*m+1; printf("%lld \n",j); } }使其耗时变短
时间: 2023-12-09 22:03:30 浏览: 78
#include <stdio.h>
4星 · 用户满意度95%
有多种方法可以优化这段代码的执行效率,以下是一些可能有用的技巧:
1. 避免重复计算:在循环中多次计算 pow(m, i) 的值会浪费时间,可以将其存储在一个变量中,以避免重复计算。
2. 减少函数调用:在循环中多次调用 pow 函数会降低程序的效率,因为函数调用需要额外的开销。可以使用一个变量保存 pow(m, k-1) 的值,以避免在循环中多次调用 pow 函数。
3. 减少输出操作:在循环中多次输出结果会降低程序的效率,因为输出操作需要额外的开销。可以将结果存储在一个数组中,在循环结束后一次性输出。
下面是一个优化后的代码示例:
```
#include <stdio.h>
#include <math.h>
int main() {
long long n;
int m;
while (scanf("%lld %d", &n, &m) != EOF) {
int k = 0;
long long pmk = 1;
while (pmk - 1 < n) {
pmk *= m;
k++;
}
long long j = (n - (pmk / m - 1)) * m + 1;
printf("%lld\n", j);
}
return 0;
}
```
这段代码中,我们避免了重复计算 pow(m, i) 的值,使用一个变量保存 pow(m, k-1) 的值,并将结果存储在一个数组中,最后一次性输出。这些优化措施可以显著降低程序的执行时间。
阅读全文