高精度压位乘法
看到网上有一道高精度问题,但是如果普通模拟只能拿60分,要压4位才能AC。但是压位我不会做,请高手指教普通模拟:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sum[10000]={0};
void rollback(char array[],int Len)//反转
{
char temp;
int i;
for(i=0;i<Len/2;i++)
temp=array[i],array[i]=array[Len-i-1],array[Len-i-1]=temp;
}
int amass(int a[],int b[],int a_length,int b_length)
{
int length=0,i,j,temp;
for(i=0;i<a_length;i++)
{
temp=0;
for(j=0;j<b_length;j++)
{
temp=a[i]*b[j]+temp/10+sum[i+j];
sum[i+j]=temp;
}
sum[i+j]=temp/10;
}
length=i+j;
return length;
}
int main()
{
int A[1000]={0},B[1000]={0};
int a_length,b_length,i,length=0;
char a[1000],b[1000];
gets(a),gets(b);
a_length=strlen(a);b_length=strlen(b);
rollback(a,a_length),rollback(b,b_length);
for(i=0;i<a_length;i++)
A[i]=a[i]-'0';
for(i=0;i<b_length;i++)
B[i]=b[i]-'0';
length=amass(A,B,a_length,b_length);
while(sum[length]==0&&length>0)
length--;
for(i=length;i>=0;i--)
printf("%d",sum[i]);
system("pause");
return 0;
}