UVA11029 数学

UVA11029 Leading and Trailing

简单数学。

输出 \(n^k\) 的前三位数字与末三位数字。

对于后面的数字,快速幂解决,不必多说。

对于前面的数字,由于 \(n^k\) 过大无法直接处理,可以转换为对数。

由于需要使用 十进制 下的数位,考虑 \(\log_{10}\)

显然地,\(\forall x \in \mathbb Z\)\(x\) 的前三位为

\[\left\lfloor x \div 10^{\lfloor \log_{10} x \rfloor - 2} \right\rfloor \]

\(d(x)\)\(x - \lfloor x \rfloor\)(即 \(x\) 的小数部分),可以简化为

\[\left\lfloor 10^{2 + d(\log_{10} x)} \right\rfloor \]

则,\(n^k\) 的前三位就是

\[\left\lfloor 10^{2 + d(k \log_{10} n)} \right\rfloor \]

在输出后三位时有可能有前导 \(0\),使用 printf("%02lld") 输出。代码

乘除转换为对数的加减在很多题目中均有运用,只不过要注意精度问题。

posted @ 2024-03-22 17:31  Carrot-Meow~  阅读(6)  评论(0)    收藏  举报