大整数相乘算法分析,大整数相乘二进制

  大整数相乘算法分析,大整数相乘二进制

  读入两个大整数,分别放在两个字符串中,声明第三个字符串用于保存结果。

  它涉及到字符和数字转换的技巧。具体实现请见代码。

  #包括iostream

  #包含字符串

  #包含stdlib.h

  使用命名空间std

  int main()

  字符串str1,str2,tem

  int len1,len2,len3,I,j,m,n;

  couendl * * * * * * * * * * * * * * * * * *此程序完成两个大整数的乘法运算* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;

  Cout 输入第一个大整数:\ n ;

  CIN str 1;

  Cout 输入第二个大整数:\ n ;

  CIN str 2;

  //分别求两个大整数的长度

  len 1=str 1 . size();

  len 2=str 2 . size();

  //将高位的字符串放入str1,低位的字符串放入str2。

  if(len1 len2)

  tem=str1

  str1=str2

  str2=tem

  i=len1

  len1=len2

  len 2=I;

  //k保存低位开始的进位,开始应该是0。

  int k=0;

  //将乘法的结果存储在str3中。将str3声明为最大位数的double就可以了,最后一位作为标志位,存储 \0 ,这样读取时就不会越界。

  len3=2 * len1 2

  char * str 3=new char[len 3];

  //清除str3中的内容。

  memset(str3, 0 ,len 3);

  str 3[len 3-1]=0;

  //外环代表乘数,内环代表被乘数。将乘数的每一位乘以被乘数,并将结果保存在str3中。

  for(I=len 2-1;我我-)

  //从str3最后一位的前一位开始存储数字,最后一位已经放了0。

  len 3=len 3-1;

  m=len 3-1;

  //取出被乘数的每一位,乘以乘数位。

  for(j=len 1-1;j j -,m -)

  int a1=str 2[I]- 0 ;

  int a2=str 1[j]- 0 ;

  int a3=str 3[m]- 0 ;

  n=(str 2[I]--0 )*(str 1[j]--0 )(str 3[m]--0 )k;

  如果(n 10)

  str 3[m]=n 0 ;

  k=0;

  其他

  str3[m]=n“0”;

  k=n/10;

  //最后一次将低位的进位加到str3。

  而(k 10)

  str3[m]=k“0”;

  k=k/10;

  m-;

  str 3[m]=k 0 ;

  k=0;

  //以下函数用于打印。如果前几个数字是字符0,则不会打印。

  I=0;

  while(str3[i]==0 )

  我;

  str 3=I;

  cout 运算的结果是: str3 endl

  返回0;

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: