三乗根は Math 標準ライブラリの Pow を使って
double val = Math.Pow((double)number, 1.0 / 3.0)
こんな風に求められるけれども、number が整数のときは
これでは誤差が出るので使い物にならない。
なのでプログラムを自分で書く!
呼び出し側。最近の .NET では main なんて書かない。
using MathLibrary; Console.WriteLine(MathLib.CubeRoot(679L * 679L * 679L));
ライブラリなんで static ライブラリでいいじゃろ。たぶん。
本丸の処理はこんなんだ。
namespace MathLibrary { public static class MathLib { private static readonly int[][] cubeRootTable = [ [0, 0], [1, 1], [8, 8], [27, 7], [64, 4], [125, 5], [216, 6], [343, 3], [512, 2], [729, 9], ]; public static long CubeRoot(long num) { List<int> result = [cubeRootTable[(int)(num % 10L)][1]]; for (long i = num / 1000L; i > 0L; i /= 1000L) { int j; for (j = 1; j < 10; j++) { if ((int)(i % 1000L) < cubeRootTable[j][0]) { break; } } result.Add(cubeRootTable[j - 1][1]); } result.Reverse(); long val = 0L; foreach (int v in result) { val = 10L * val + (long)v; } // 検算 if (val * val * val == num) { return val; } else { return 0L; } } } }
3乗根が整数にならない場合は 0 を返す!(どんだけ手抜きやねんw)
実行してみる。
679 D:\srcs\c_sharp\MathLibrary\ConsoleApp\bin\Debug\net8.0\ConsoleApp.exe (プロセス 16328) は、コード 0 で終了しました。 デバッグが停止したときに自動的にコンソールを閉じるには、[ツール] -> [オプション] -> [デバッグ] -> [デバッグの停止時に自 動的にコンソールを閉じる] を有効にします。 このウィンドウを閉じるには、任意のキーを押してください...
誤差なんか出ない!やったね!!