简单大整数相乘的问题
需要注意事项:
①对字符串处理要用memset(a,'0',sizeof(a));不可将'0'误写成0,memset可对字符数组进行任意赋值,处理长度为一个字节
②前置零处理
//通过
#include <stdio.h>
#include <string.h>
int main()
{
char x[260],y[260],mul[520];
while(scanf("%s%s",x,y)==2)
{
int u;
memset(mul,0,sizeof(mul));
int ylen=strlen(y);
int xlen=strlen(x);
for(int i=0;i<xlen;i++)
x[i]-='0';
for(int i=0;i<ylen;i++)
y[i]-='0';
for(int k=ylen-1;k>=0;k--)
{
int p,q;
q=0;
u=ylen-1-k;
for(int j=xlen-1;j>=0;j--)
{
p=x[j]*y[k]+q+mul[u];
mul[u++]=p%10;
q=p/10;
}
if(q)
mul[u++]=q;
}
int i;
for(i=u-1;i>0;i--)//###,出错原因--前置零的处理
if(mul[i])
break;
for(;i>=0;i--)
printf("%d",mul[i]);
printf("\n");
}
return 0;
}
//通过
#include <stdio.h>
#include <string.h>
#define M 260
void reverse(char a[])
{
int len=strlen(a);
for(int i=0;i<len/2;i++)
{
char temp=a[len-1-i];
a[len-1-i]=a[i];
a[i]=temp;
}
}
void mutiply(char a[],char b[],char c[])
{
if (strcmp(a, "0") == 0 || strcmp(b, "0") == 0)//###,必须要做考虑,否则要加对前置零的处理。
{
strcpy(c,"0");
return;
}
int alen,blen,q;
alen=strlen(a);
blen=strlen(b);
for(int i=0;i<alen;i++)
{
q=0;
for(int j=0;j<blen;j++)
{
int p=(a[i]-'0')*(b[j]-'0')+c[i+j]-'0'+q;
q=p/10;
c[i+j]=p%10+'0';
}
if(q!=0)
c[i+blen]=q+'0';
}
if(q!=0)
c[alen+blen]='\0';
else
c[alen+blen-1]='\0';
}
int main()
{
char x[M],y[M],result[2*M];
while(scanf("%s%s",x,y)==2)
{
reverse(x);
reverse(y);
memset(result,'0',sizeof(result));//这里的处理必须为'0',而不是0
mutiply(x,y,result);
reverse(result);
printf("%s\n",result);
}
return 0;
}