以前做过整数的,不支持小数,还过很简单就可以改过来,你先将小数当成整数输入,运算完之后记下之前两个乘数的小数位之和,再将小数位加上就可以了.
#include<stdio.h>
#include<string.h>
void sort(char* a,int n)
{
int i;
char c;
for(i=0;i<=(n-1)/2;i++)
{
c=a[i];
a[i]=a[n-1-i];
a[n-1-i]=c;
}
}
void main()
{
int n1,n2,n3,n4,i,j,k=0;
char A[1000],B[1000],C[1000],D[2000];
char* E;
while(1)
{ D[0]='\0';
gets(A); //A为第一个乘法因子
gets(B); //B为第二个乘法因子
n3=strlen(A);
sort(A,n3);
n4=strlen(B);
sort(B,n4);
for(i=0;i<n3;i++)
{
k=0;
for(j=0;j<n4;j++)
{
C[j]=((A[i]-48)*(B[j]-48)+k)%10+48; //C用于存放A中的每一位与B中的数的乘积
k=((A[i]-48)*(B[j]-48)+k)/10; //D为计算结果
}
if (k==0)
C[j]='\0';
else
{
C[j]=k+48;
C[j+1]='\0';
}
n1=strlen(C);
n2=strlen(D+i);
E=D+i; //E指向D的下一位达到加法的移位
if (n2>n1) n1=n2;
k=0;
for(n2=0;n2<n1;n2++) //下面为高精度加法
{
if (E[n2]>='0'&&E[n2]<='9'&&C[n2]>='0'&&C[n2]<='9')
{
E[n2]=E[n2]+C[n2]-48+k;
if (E[n2]>57)
{
E[n2]=E[n2]-10;
k=1;
}
else
k=0;
}
else if(C[n2]>='0'&&C[n2]<='9')
if((E[n2]=C[n2]+k)>57)
{
E[n2]=E[n2]-10;
k=1;
}
else k=0;
else if(E[n2]>='0'&&E[n2]<='9')
if((E[n2]=E[n2]+k)>57)
{
E[n2]=C[n2]-10;
k=1;
}
else k=0;
}
if (k>0)
{
E[n2]=k+48;
E[n2+1]='\0';
k=0;
}
else
{
E[n2]='\0';
}
}
sort(D,strlen(D));
printf("%s\n",D);
i=0;
while(D[i]!='\0') D[i++]='\0'; //将D清除进行下一次计算
}
}