程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

C语言实现超大数乘法(c语言大数相乘)

balukai 2025-06-08 19:22:37 文章精选 2 ℃

超大数乘法的关键是如何对齐数据位数,这里引入积的位数l,乘数位数i,被除数位数k,并令l=i+k-1,使问题得以解决,程序如下:

//超大数乘法(超大数:是指超过计算机处理范围的整数)

#include <stdio.h> /*包含输入输出函数*/

#include <string.h> /*包含字符串处理函数*/

#define N 200 //常数N应大于数据的最大位数

main ()

{ char bc[N],cc[N]; //定义字符串数组:被乘数串bc,乘数串cc

int b[N]={},c[N]={},j[N*2]={}; //定义并初始化数组:被乘数b,乘数c,积j

int x,i,k,lb,lc,l; //循环变量x,i,k;被乘数位数lb,乘数位数lc,积的位数l

//输入:

printf("请连续输入被乘数:");gets(bc);

printf("请连续输入乘数:");gets(cc);

//转换:

lb=strlen(bc); lc=strlen(cc); //测字符串长度

for(x=1;x<=lb;x++) {b[x]=bc[lb-x]-48;} //被乘数串转换成整数

for(x=1;x<=lc;x++) {c[x]=cc[lc-x]-48;} //乘数串转换成整数

// 运算:

for(i=1;i<=lc;i++) //乘数

{ for(k=1;k<=lb;k++) //被乘数

{ l=k+i-1; //定位(确定积的位数l)

j[l]+=b[k]*c[i]; //求积并累加上次进位

}

}

for(x=1;x<=l;x++) //重新进位:

{ j[x+1]+=j[x]/10;j[x]%=10; //求进位及本位

}

if(j[l+1]>=1) l++;//处理首位进位及总位数

//输出:

printf("%s*%s=",bc,cc);

for(x=l;x>=1;x--) //从高位到低位

{ if(x%3==0&&x!=l) printf(","); //每3位加一个","

printf("%d",j[x]); //输出积

}

}

最近发表
标签列表