您的位置:首页 > 其它

百炼2980:大整数乘法

2013-06-17 14:43 239 查看
注意计算相乘时的方法

可以等到所有的都处理完后统一处理进位问题,这是看讲解后学到的方法,我自己做的是每次计算一次进行一次进位处理。这样就比较麻烦,而讲解中的统一处理算是对本道题的优化吧。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 200
int main()
{
int an1[MaxSize+10];
int an2[MaxSize+10];
int bn[MaxSize+MaxSize];//存放处理结果
char str1[MaxSize+10];
char str2[MaxSize+10];
int i,j;
//输入数据
scanf("%s %s",str1,str2);
//初始化int数组
memset(an1,0,sizeof(an1));
memset(an2,0,sizeof(an2));
memset(bn,0,sizeof(bn));
//将输入的字符数组值转入int数组
int len1=strlen(str1);
for(i=len1-1,j=0;i>=0;i--)
{
an1[j]=str1[i]-'0';
j++;
}
int len2=strlen(str2);
for(i=len2-1,j=0;i>=0;i--)
{
an2[j]=str2[i]-'0';
j++;
}
/*
for(i=0;i<len1;i++)
{
printf("%d %d\n",an1[i],an2[i]);
}*/
//计算将结果存储到bn数组中
int t;
int temp=0;
for(j=0;j<len2;j++)
{
t=j;
for(i=0;i<len1;i++)
{
temp=an1[i]*an2[j];
if(temp/10>0)
{
bn[t]+=temp%10;
bn[t+1]+=temp/10;
//  printf("~~1%d,%d,\n",bn[t],bn[t+1]);
}else
{
bn[t]+=temp;
}

int dd;
dd=bn[t];
if(dd/10>0)
{
bn[t]=dd%10;
bn[t+1]+=dd/10;
}
//  printf("~~2%d,%d,\n",bn[t],bn[t+1]);
t++;
}

}

//显示出来,包括特殊情况的处理,跳过之前为0的数据
int startoutput=0;
for(i=MaxSize*2-1;i>=0;i--)
{
if(startoutput)
printf("%d",bn[i]);
else if(bn[i]!=0)
{
printf("%d",bn[i]);
startoutput=1;
}
}
if(startoutput==0)
printf("0");

return 0;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: