弄清楚一个非常大的数字是否可以被另一个整除

时间:2014-05-28 12:35:12

标签: c++ string division integer-division

我正在处理一个编程问题,我需要将一个非常大的数字除以10 ^ 50000的另一个1000的数量级,以便弄清楚一个是否可以被另一个整除。所以我需要使用字符串来存储这个大数字。

我不知道用字符串除数字的任何方法。有人能指出我的算法吗?

1 个答案:

答案 0 :(得分:0)

这是算法的开始。它似乎做你要求的:它执行"长期划分"在4个字符块中,并跟踪剩余部分。它在末尾打印剩余部分。您应该能够根据您的特定需求进行调整。注意 - 在4个字节的块中执行此操作会使其明显快于传统的一次一个字符算法,但它确实依赖于b足够小以适应int(因此4个字符块。

#include <stdio.h>
#include <string.h>

int main(void) {
  char as[]="123123123123126";
  int l = strlen(as);
  int rem;
  int lm = l % 4; // the size of the initial chunk (after which we work in multiples of 4)
  char *ap=as;    // a pointer to keep track of "where we are in the string"
  int b=123;      // the divisor
  int a;
  sscanf(ap, "%4d", &a);
  while(lm++ < 4) a /= 10;
//  printf("initial a is %d\n", a);
  rem = a % b;

  for(ap = as + (l%4); ap < as + l; ap += 4) {
//  printf("remainder = %d\n", rem);
  sscanf(ap, "%4d", &a);
//  printf("a is now %d\n", a);
  rem = (a + 10000*rem) %b;
  }
  printf("remainder is %d\n", rem);
  return 0;
}

输出:

remainder is 3

这需要一些清理,但我希望你明白这一点。