大整数相乘算法分析,大整数相乘二进制
读入两个大整数,分别放在两个字符串中,声明第三个字符串用于保存结果。
它涉及到字符和数字转换的技巧。具体实现请见代码。
#包括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就可以了,最后一位作为标志位,存储 ,这样读取时就不会越界。
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;
}