使った方が無難かも知れない(実行速度も変わらない)。差分を返すように改造しても良いだろう(ただし、型に注意。3回以上入れ子にすると負の値となってしまうので、上手く行かないようだ。式としては以下のようになる。zlog10y式は無理矢理なので、正しい書き方とかは勘弁して欲しい(笑)。級数(数列の和)っぽく書けばもっとカッコイイのかも知れないが、この書き方なら高校数学の範疇なので理解できるハズだ(無理矢理感は別として)。これ以上は無理そうなので、他の方法を研究してみるのも面白いだろう。■任意精度を使う最後に任意精度実数を使って桁を調べてみよう。考え方としては「文字列に変換する方法」と同じと思って良い。具体的な値を返すので、桁が大きくなるほど重くなるが、検算したいときには役に立つこともあるだろう(といっても100万桁ぐらいが限界でそれ以上はフリーズしたようになる)。z));141347765182270746366663800059433481266198711750049516649728496103409582087474.0上の例はべき乗のべき乗(235)と同じものだ。できたとして重すぎてフリーズしたようになると思うが)。具体的な値を知りたければ文字列化(toString())すれば良いが、桁が大きいときは負荷が高いので、あらかじめ値の範囲を調べた上で使った方が良いだろう。オンラインジャッジでの問題などでは、任意精度ではほとんどの場合タイムアウトすると思うので、桁数だけなら、前述の「powLength()」(べき乗の桁数)や「powpowLength()」(べき乗のべき乗の桁数)を使った方が速い。[edit]どちらかというとプロコン用ライブラリという使い方になるかもしれないが、大量のべき乗計算が必要になったとき、高速に計算する方法を知っておけば、イザというとき役に立つかもしれない。今回紹介する方法は「繰り返し二乗法」という算法である。数学的に解説してもいいが、ググればたくさん出てくるので、理論はさておき、大雑把な方法論だけ覚えてしまおう(笑)。sum;}簡単に解説すると、使うのは主に指数法則である。ように2乗を繰り返して、計算回数を減らそうというアルゴリズムである。なるので、大量の計算でも高速にできる。やって分解したらいいかというと、2進法を使うのである。かければ良いのかわかるのである。言葉で説明すると難しく感じるので、具体的な数値を指数法則で分解したり、2進数と照らしあわせて見て欲しい。乗した値をかけていくのである。なんとなく数学的によくわからないと思ったら、以下の資料などを見てみると良いだろう。わかってしまえば、そう難しいものでもない。約5倍ほどの速度で計算できる。