大数问题,两大数相乘 +方法1

int mul[1000];
int a1[100],b1[100]; 
int lena,lenb;
void output()   //输出结果
{
int i,pos;
for(i=999;i>=0;i--)
if(mul[i]!=0)
{pos = i; break;}
for(i=pos;i>=0;i--)
printf("%d",mul[i]);
printf("\n");
}


int mov(int *c,int n)
{
int pos,i;
for(i=199;i>=0;i--)  //找到c数组中的最高位
if(c[i]!=0)
{pos=i;break;} 
for(i=pos;i>=0;i--)   //将数组往后面移动n位
c[i+n] = c[i];
for(i=0;i<n;i++)
c[i] = 0;        //往前面补0
return (pos+n);       //返回最高位位置
}


void cheng()
{
int i,j,k;
int c[200];
memset(c,0,sizeof(c));
for(i=0;i<lenb;i++)
{
for(j=0;j<lena;j++)
{
c[j] = a1[j]*b1[i];   //被乘数的每一位乘以乘数的一位
}
mov(c,i);
for(k=0;k<200;k++)  //把乘积累加起来
mul[k]+=c[k];
int sum=0;
for(k=0;k<999;k++)   //产生进位处理
{
sum +=mul[k];
mul[k] = sum%10;
sum/=10;
}
memset(c,0,sizeof(c));
}
}


void main()
{
int i,j; 
char a[100],b[100];   //用来输入两个大数
gets(a);
gets(b);
lena=strlen(a);
lenb=strlen(b);
for(i=0;a[i]!='\0';i++)
a1[i] = a[strlen(a)-i-1] - 48;   //将字符串大数转换成整形
for(i=0;b[i]!='\0';i++)
b1[i] = b[strlen(b)-i-1]-48;


cheng();   //大数相乘
output(); 


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值