何するための最良の方法である分割以上持っている二つの数字50桁が、200未満。
私は数を表す構造を持っています:
struct number{
int digit[MAX_SIZE]; // MAX_SIZE = 5;
bool negative; // Is it negative or positive number
};
このアルゴリズムを実装しようとするときに直面する問題は、数値'n'をより多くの桁を持つ数値'm' (n> m)で除算しようとしている場合、変数に格納できるということです。分割できますか?
例:1234567891234567891234567/12345678912345678
私の最初の推測は、繰り返される減算と関係がありますが、それは遅すぎませんか?
手作業でそれを行う方法について考えてください。
最初に最上位桁を計算します。そして、数が十分に大きい場合は、一度に1桁を見つけて、減算を繰り返すことによってそれを行います。
あなたの場合:最初の数字は25桁で、2番目の数字は17桁です。
したがって、1E8に対応する数字から始めます。
これがCスタイルの擬似コードです。
struct number n1 = 1234567891234567891234567;
struct number n2 = 12345678912345678;
int start = floor(log10(n1) - log10(n2)); // Position of most significant digit in answer
struct number result = 0;
int i,j;
struct number remainder = n1;
// Start with the most significant digit
for i = start to 0 {
// Find the highest digit that gives a remainder >= 0
for j = 9 to 0 step -1 {
if (remainder - j * n2 * pow(10, i) >= 0) {
// We found the digit!
result = result + j * pow(10, i);
remainder = remainder - j * n2 * pow(10, i);
break; // Move on to the next digit
}
}
}
// We now have the result and the remainder.
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加