超长整数字符串乘法的算法
2008-04-02 21:39
176 查看
//*******************************//
//超长整数字符串乘法的算法 //
//在vs2005下调试通过 //
//******************************//
#define MAX 10000
int a[MAX], b[4],c[MAX];
int times(int a[],int b[],int la,int lb)
//a[],b[]为两个被乘数输入,高位在前,0位不用,比a=120,则a[3]=1,a[2]=2,a[1]=0;输出c也是这样
//la,lb,lc为最高位位数,比如上例la=3;
{
int i,j,k,re,jin=0;
for(i=1;i<=MAX;i++)
c[i]=0;
for(i=1;i<=la;i++)
{
jin=0;
for(j=1;j<=lb;j++)//进位乘法
{
re=a[i]*b[j]+jin+c[i+j-1];
jin=re/10;
c[i+j-1]=re%10;
k=i+j-1;
}
while(jin>0)//考虑连续进位
{
k++;
re=c[k]+jin;
c[k]=re%10;
jin=re/10;
}
}
return k;//返回结果的位数
}
//示例
/*
main()
{
int i;
a[2]=2;a[1]=2;
b[2]=4;b[1]=4;
printf("%d/n",times(a,b,2,2));
for(i=3;i>=1;i--)
printf("%d",c[i]);
}
返回3
968
*/
//超长整数字符串乘法的算法 //
//在vs2005下调试通过 //
//******************************//
#define MAX 10000
int a[MAX], b[4],c[MAX];
int times(int a[],int b[],int la,int lb)
//a[],b[]为两个被乘数输入,高位在前,0位不用,比a=120,则a[3]=1,a[2]=2,a[1]=0;输出c也是这样
//la,lb,lc为最高位位数,比如上例la=3;
{
int i,j,k,re,jin=0;
for(i=1;i<=MAX;i++)
c[i]=0;
for(i=1;i<=la;i++)
{
jin=0;
for(j=1;j<=lb;j++)//进位乘法
{
re=a[i]*b[j]+jin+c[i+j-1];
jin=re/10;
c[i+j-1]=re%10;
k=i+j-1;
}
while(jin>0)//考虑连续进位
{
k++;
re=c[k]+jin;
c[k]=re%10;
jin=re/10;
}
}
return k;//返回结果的位数
}
//示例
/*
main()
{
int i;
a[2]=2;a[1]=2;
b[2]=4;b[1]=4;
printf("%d/n",times(a,b,2,2));
for(i=3;i>=1;i--)
printf("%d",c[i]);
}
返回3
968
*/
相关文章推荐
- ProjectRuler 算法练习之 位数组成字符串相同的整数
- 算法笔记_034:大整数乘法(Java)
- 贪心算法-大整数乘法/加法/减法
- 超长整数的基础运算 算法实现自平方篇
- 算法之【大整数乘法】
- 【算法题】整数与字符串之间的相互转化
- C/C++面试之算法系列--atoi(char *str)将字符串转换成整数
- 字符串转换为整数的常用算法
- 算法之大整数乘法
- 超长整数的基础运算 算法实现之准备篇
- [算法练习] 把字符串转换成整数
- 算法06:大整数乘法分治算法——分治法Part2
- 大整数算法[13] 单数位乘法
- 大整数算法[11] Karatsuba乘法
- 一个整数转换成字符串(C/C++自己写的算法)
- 算法——大整数乘法
- leetcode:Multiply Strings(字符串的乘法)【面试算法题】
- 大整数的乘法——比较好的算法! (转…
- 设计算法来统计一个输入字符串中所包含的整数个数,并输出这些数
- 字符串转成整数大数乘法