c语言乘法程序
㈠ 求编写一个c语言大数乘法的程序,尽量简单一些,要求每一步有详细讲解。
#include<iostream>
#include<fstream>
#include<string>//加入这行
usingnamespacestd;
voidmultiply(constchar*a,constchar*b);
intmain()
{
stringnum1,num2;//初始状态用string来存储大数
cout<<"现在,来两个大数吧!"<<endl;
cin>>num1>>num2;
constchar*p1=num1.c_str();//将string转为constchar*
constchar*p2=num2.c_str();//将string转为constchar*
multiply(p1,p2);
system("pause");
return0;
}
voidmultiply(constchar*a,constchar*b)
{
inti,j,ca,cb,*s;
ca=strlen(a);
cb=strlen(b);
s=(int*)malloc(sizeof(int)*(ca+cb));//分配存储空间
for(i=0;i<ca+cb;i++)s[i]=0;//每个元素赋初值0
for(i=0;i<ca;i++)
for(j=0;j<cb;j++)
s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
for(i=ca+cb-1;i>=0;i--)//这里实现进位操作,从低位到高位开始进位
if(s[i]>=10)//将大于10的数的进位加到高位,即i-1位,i位留余数
{
s[i-1]+=s[i]/10;
s[i]%=10;
}
char*c=(char*)malloc((ca+cb)*sizeof(char));//分配字符数组空间,因为它比int数组省!
i=0;while(s[i]==0)i++;//跳过头部0元素
for(j=0;i<ca+cb;i++,j++)c[j]=s[i]+'0';
c[j]='