#include<iostream>
using namespace std;
#define N 40
#define M 100
int res[M];
/*****
* Function: 大整数相乘算法
* 参数:
* a: 乘数,字符串,一个字符代表整数的一位,左侧是最高位,右侧是最低位
* b: 乘数,同上
* n: a的长度
* m: b的长度
*****/
void Multiply(char *a,int n,char *b,int m) // 大整数相乘
{
int i,j,temp,t,tt;
int num=0;
memset(res,0,sizeof(res));
for(i=0;i<m;i++)
{
temp=0;
for(j=0;j<n;j++)
{
t=(a[n-1-j]-'0')*(b[m-1-i]-'0')+temp;//从最低位开始计算
if(0 == t)
continue;
num = j+i;
tt = res[num]+(t);
res[num] = tt%10;
temp = tt/10;
}
if( temp > 0 )
{
res[++num] += temp;
}
}
for(i=num;i>=0;i--) // 输出结果
printf("%d",res[i]);
printf("\n");
}
int main()
{
cout<<"请输入两个数"<<endl;
char test1[100],test2[100];
cin.getline(test1,100,'\n');
cin.getline(test2,100,'\n');
Multiply(test1,strlen(test1),test2,strlen(test2));
system("PAUSE");
return 0;
}
有了大整数相乘,那么小数点的大小数也就可以解决了,先把小数转换整数,然后计算出结果后再把小数点加上去