永发信息网

如何用C++编写大数的乘法

答案:4  悬赏:70  手机版
解决时间 2021-03-26 16:56
  • 提问者网友:那叫心脏的地方装的都是你
  • 2021-03-26 01:28
如何用C++编写大数的乘法
最佳答案
  • 五星知识达人网友:摆渡翁
  • 2021-03-26 01:37
说明:这是c程序,程序就是算法,这个程序思路非常清晰。就是模拟手动算法,被乘数与乘数的各位分别相乘,然后移位相加。程序已有详细注释。为简化程序,在程序中已设定被乘数和乘数,你可以更改也可以添加输入语句输入。这不是问题。
思考:个人认为为简化计算,应使得被乘数大于乘数,当输入的乘数大于被乘数时,可先将两数调换再相乘。调换也就是个swap()函数之类,我没加进程序里,这个你可以做到,这也不是问题。如程序有不足之处密我。

#include
#include


void calc1(char* str1,int len1,int* tmp,int m);
void accumulate(int cnt,int* res,int res_len,int* tmp,int tmp_len);
char* bignum_multi(char* str1,int len1,char* str2,int len2,char* result,int len);

int main()
{
int i,j;

char str1[]="123456789987";
char str2[]="987456123";
char* result;


int len1=strlen(str1),len2=strlen(str2);
int len=len1+len2;


result=(char*)malloc(len*sizeof(char));
for(i=0;i*(result+i)='0';


printf("The result is: %s",bignum_multi(str1,len1,str2,len2,result,len));
free(result);
system("pause");
return 0;
}


char* bignum_multi(char* str1,int len1,char* str2,int len2,char* result,int len)
{
int i,j,m=0,cnt=0,*tmp,*res;


tmp=(int*)malloc((len1+1)*sizeof(int));
res=(int*)malloc(len*sizeof(int));


for(i=0;itmp[i]=0;
for(j=0;jres[j]=0;

for(i=len2-1;i>=0;i--)
{

m=str2[i]-'0';

calc1(str1,len1,tmp,m);

cnt++;
accumulate(cnt,res,len,tmp,len1+1);
}


i=0;j=0;

while(res[i++]==0);

for(m=i-1;mresult[j]=res[m]+0x30;
result[j]='\0';

free(tmp);
free(res);
return result;
}


void calc1(char* str1,int len1,int* tmp,int m)
{

int i,d=0,remainder=0,carry=0;

for(i=len1-1;i>=0;i--)
{
d=str1[i]-'0';
d*=m;
remainder=(d+carry)%10;
carry=(d+carry)/10;
tmp[i+1]=remainder;
}
if(carry)
tmp[0]=carry;
else
tmp[0]=0;
}

void accumulate(int cnt,int* res,int len,int* tmp,int len1)
{
int m=0,n=0,i,k,remainder=0;
static int carry=0;
for(k=len1-1,i=0;k>=0;k--,i++)
{
m=tmp[k];
n=res[len-cnt-i];
if(m+n+carry>=10)
{
remainder=(m+n+carry)%10;
carry=1;
}
else
{
remainder=m+n+carry;
carry=0;
}
res[len-cnt-i]=remainder;
}
}
全部回答
  • 1楼网友:雪起风沙痕
  • 2021-03-26 05:21
可以用数组或链表
  • 2楼网友:慢性怪人
  • 2021-03-26 03:44
大数的加法会:用数组模拟加法!
大数的乘法估计也用数组模拟。
  • 3楼网友:十年萤火照君眠
  • 2021-03-26 02:57
与楼主一同等待解答。
用汇编解决大数乘法轻而易举,C++不清楚
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯