高精度实现10000位数字的乘除法(C++)
来源:优易学  2010-1-14 19:19:32   【优易学:中国教育考试门户网】   资料下载   IT书店

  说明:做了个计算器,本来是要上传整个项目的,但突然发现不能上传资源了,就贴出来算法部分的代码,大家多多指点啊,呵呵,比较难读,以后再上传整个项目。
  //转换,供乘法部分调用
  int turn(char s[], int num[])
  {
  int i = 0, len, j;
  while(1)
  {
  if(s[i] == 0) break;
  else if(s[i] == '-' || s[i] == '0') i++;
  else break;
  }            //i指向第一个非零数字
  for (j = 0; s[j] != 0; j++) ;
  j--;          //j指向最后数字
  for(len = 0; j >= i; j--, len++)
  {
  num[len] = (int)s[j] - 48;
  }
  return(len);
  }
  //转换,供除法部分调用
  int turn2(char s[], int num[])
  {
  int i = 0, len, j;
  while(1)
  {
  if(s[i] == 0) break;
  else if(s[i] == '-' || s[i] == '0') i++;
  else break;
  }            //i指向第一个非零数字
  for (j = 0; s[j] != 0; j++) ;
  j--;          //j指向最后数字
  for(len = 0; j >= i; i++, len++)
  {
  num[len] = (int)s[i] - 48;
  }
  return(len);
  }
  void mul(int *a, int *b, int *c, int len1, int len2)
  {
  int i, j;
  for (i = 0; i < len1; i++)
  {
  for (j = 0; j < len2; j++)
  {
  c[i + j] += a[i] * b[j];
  if (c[i+j] >= 10)
  {
  c[i+j+1] += c[i+j] / 10;
  c[i+j] = c[i+j] % 10;
  }
  }
  }
  }
  //比较大小,被Division函数调用
  int cmp(int *a, int *b, int len1, int len2)
  {
  int i, len, result = 0, j;
  for (i = 0; a[i] == 0; i++);
  len = len1 - i;
  if(len < len2) result = -1;
  else if(len > len2) result = 1;
  else
  {
  for (j = 0; i < len1, j < len2; i++, j++)
  {
  if (a[i] > b[j])
  {
  result = 1;
  break;
  }
  if (a[i] < b[j])
  {
  result = -1;
  break;
  }
  }
  }
  return(result);
  }

[1] [2] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训