大数的乘法,通过数组,有异常,高手帮忙啊
大数的乘法,通过数组,有错误,高手帮忙啊~~~
void cheng(int *number1,int *number2,int *number,int strlen1,int strlen2,int strlen)
{
/*number1和number2是两个需要乘法运算的数组,将结果存在number中,strlen1是number1的长度,strlen2是number2的长度,strlen是number的长度,并且strlen=strlen1+strlen2*/
int *num_temp1=new int[strlen](); //这是开辟两个临时的空间把number1上的数存起来
int *num_temp2=new int[strlen](); //同理
//将临时开辟的数组赋初值0,number 这个数组已经赋初值0了
for(int i=0;i <strlen;i++)
{
num_temp1[i]=0;
}
for(i=0;i <strlen;i++)
{
num_temp2[i]=0;
}
//将number1和number2存到临时数组中去,是按右对齐的,
for( i=0;i <strlen1;i++)
{
num_temp1[strlen-1-i]=number1[strlen1-1-i];
}
for(i=0;i <strlen2;i++)
{
num_temp2[strlen-1-i]=number2[strlen2-1-i];
}
int temp;//这个变量的作用是最后计算一共有多少位并且从哪位开始输的
int icounter=0;
for(int j=0;j <strlen1;j++)
{
icounter=j;
for(i=0;i <strlen2;i++)
{
if((number[strlen-1-icounter]+num_temp1[strlen-1-i]*num_temp2[strlen-1-j])> =10)
{
temp=number[strlen-icounter];
number[strlen-2-icounter]=(number[strlen-1-icounter]+num_temp1[strlen-1-i]*num_temp2[strlen-1-j])/10;
}
number[strlen-icounter-1]=(number[strlen-icounter-1]+num_temp1[strlen-i-1]*num_temp2[strlen-1-j])%10;
icounter++;
}
}
int flag=(temp+num_temp1[strlen-i]*num_temp2[strlen-j])> =10?0:1;
for(i=0+flag;i <strlen;i++)
{
cout < <number[i] < < " ";
}
}
高手们帮帮忙啊,我是真看不出来,应该是算法的问题,反正结果是一点都不对
------解决方案--------------------
用Python语言更简单
------解决方案--------------------
[code=C/C++][/code]
char *BigMul(char *p1,char *p2)
{
int ilen1=strlen(p1);
int ilen2=strlen(p2);
char *p=new char[ilen1+ilen2+1];
for (int i=0;i<ilen1+ilen2;i++)
{
p[i]=0x30;
}
p[ilen1+ilen2]=0;
int jinzhi=0,inextjinzhi=0;
for (int j=1;j<=ilen2;j++)
{
for (int m=1;m<=ilen1;m++)
{
jinzhi = inextjinzhi;
inextjinzhi=((p[ilen1+ilen2-j-m+1]-0x30)+(p2[ilen2-j]-0x30)*(p1[ilen1-m]-0x30)+jinzhi)/10;
p[ilen1+ilen2-j-m+1]=((p[ilen1+ilen2-j-m+1]-0x30)+(p2[ilen2-j]-0x30)*(p1[ilen1-m]-0x30)+jinzhi)%10+0x30;
if (m==ilen1 && jinzhi)
{
p[ilen1+ilen2-j-m]=inextjinzhi+0x30;
}
}
}
if (p[0]==0x30)
{
if (p[1]==0x30)
{
p[1]=0;
return p;
}
for (i=1;i<=ilen1+ilen2;i++)
{
p[i-1]=p[i];
}
}
return p;
}
这是我写的 你自己看一下吧
void cheng(int *number1,int *number2,int *number,int strlen1,int strlen2,int strlen)
{
/*number1和number2是两个需要乘法运算的数组,将结果存在number中,strlen1是number1的长度,strlen2是number2的长度,strlen是number的长度,并且strlen=strlen1+strlen2*/
int *num_temp1=new int[strlen](); //这是开辟两个临时的空间把number1上的数存起来
int *num_temp2=new int[strlen](); //同理
//将临时开辟的数组赋初值0,number 这个数组已经赋初值0了
for(int i=0;i <strlen;i++)
{
num_temp1[i]=0;
}
for(i=0;i <strlen;i++)
{
num_temp2[i]=0;
}
//将number1和number2存到临时数组中去,是按右对齐的,
for( i=0;i <strlen1;i++)
{
num_temp1[strlen-1-i]=number1[strlen1-1-i];
}
for(i=0;i <strlen2;i++)
{
num_temp2[strlen-1-i]=number2[strlen2-1-i];
}
int temp;//这个变量的作用是最后计算一共有多少位并且从哪位开始输的
int icounter=0;
for(int j=0;j <strlen1;j++)
{
icounter=j;
for(i=0;i <strlen2;i++)
{
if((number[strlen-1-icounter]+num_temp1[strlen-1-i]*num_temp2[strlen-1-j])> =10)
{
temp=number[strlen-icounter];
number[strlen-2-icounter]=(number[strlen-1-icounter]+num_temp1[strlen-1-i]*num_temp2[strlen-1-j])/10;
}
number[strlen-icounter-1]=(number[strlen-icounter-1]+num_temp1[strlen-i-1]*num_temp2[strlen-1-j])%10;
icounter++;
}
}
int flag=(temp+num_temp1[strlen-i]*num_temp2[strlen-j])> =10?0:1;
for(i=0+flag;i <strlen;i++)
{
cout < <number[i] < < " ";
}
}
高手们帮帮忙啊,我是真看不出来,应该是算法的问题,反正结果是一点都不对
------解决方案--------------------
用Python语言更简单
------解决方案--------------------
[code=C/C++][/code]
char *BigMul(char *p1,char *p2)
{
int ilen1=strlen(p1);
int ilen2=strlen(p2);
char *p=new char[ilen1+ilen2+1];
for (int i=0;i<ilen1+ilen2;i++)
{
p[i]=0x30;
}
p[ilen1+ilen2]=0;
int jinzhi=0,inextjinzhi=0;
for (int j=1;j<=ilen2;j++)
{
for (int m=1;m<=ilen1;m++)
{
jinzhi = inextjinzhi;
inextjinzhi=((p[ilen1+ilen2-j-m+1]-0x30)+(p2[ilen2-j]-0x30)*(p1[ilen1-m]-0x30)+jinzhi)/10;
p[ilen1+ilen2-j-m+1]=((p[ilen1+ilen2-j-m+1]-0x30)+(p2[ilen2-j]-0x30)*(p1[ilen1-m]-0x30)+jinzhi)%10+0x30;
if (m==ilen1 && jinzhi)
{
p[ilen1+ilen2-j-m]=inextjinzhi+0x30;
}
}
}
if (p[0]==0x30)
{
if (p[1]==0x30)
{
p[1]=0;
return p;
}
for (i=1;i<=ilen1+ilen2;i++)
{
p[i-1]=p[i];
}
}
return p;
}
这是我写的 你自己看一下吧