学而不思则罔,思而不学则殆

有其事必有其理, 有其理必有其事

  IT博客 :: 首页 :: 联系 :: 聚合  :: 管理
  85 Posts :: 12 Stories :: 47 Comments :: 0 Trackbacks

include <stdio.h>
#include <string.h>
#define N 40
#define M 100
int res[M];

/*****
* Function: 大整数相乘算法
* 参数:
*  a: 乘数,字符串,一个字符代表整数的一位,左侧是最高位,右侧是最低位
*  b: 乘数,同上
*  n: a的长度
*  m: b的长度
* 没有返回值,结果直接放到全局变量res数组中,如果不想要全局变量,也可以在函数中多加一个参数,保存结果。
  res中每一位存放相乘结果的各个位,跟输入不同,右侧放的是高位,即高位的对应的数组索引也是高的。
*****/

void Multiply(char *a,char *b,int n,int m)            // 大整数相乘
{
 int i,j,temp,t,tt;
 int num=0;
 memset(res,0,sizeof(res));
 for(i=0;i<m;i++)
 {
  temp=0;
  for(j=0;j<n;j++)
  {   
   t=(a[n-1-j]-'0')*(b[m-1-i]-'0')+temp;//从最低位开始计算
   if(0 == t)   
    continue;               
   num = j+i;       
   tt = res[num]+(t);   
   res[num] = tt%10;   
   temp = tt/10;
  }
  if( temp > 0 )
  {
   res[++num] += temp;
  }
 }
 for(i=num;i>=0;i--)                    // 输出结果
  printf("%d",res[i]);
 printf("\n");
}

posted on 2011-11-10 10:13 易道 阅读(373) 评论(0)  编辑 收藏 引用 所属分类: 数据结构与算法
只有注册用户登录后才能发表评论。