将两个数字除以50位数(最大200)算法

时间:2016-12-01 12:45:23

标签: algorithm divide

划分两个数字超过 50位小于200 的最佳方法是什么。

我有结构来表示一个数字:

struct number{

     int digit[MAX_SIZE]; // MAX_SIZE = 5;
     bool negative; // Is it negative or positive number
};

我在尝试实施此算法时遇到的问题是,如果我尝试用数字&划分数字' n' #39; m' (n> m)有更多数字然后你可以存储在一个变量中,你怎么能分开呢?

例如: 1234567891234567891234567/12345678912345678

我的第一个猜测是使用重复减法,但这不是太慢了吗?

1 个答案:

答案 0 :(得分:1)

想想你是如何手工完成的:

您首先计算最重要的数字。如果数字足够大,你可以通过重复减法,一次找到一个数字。

在你的情况下: 第一个数字有25位数字,第二个数字有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.