大数乘法
- 格式:docx
- 大小:44.23 KB
- 文档页数:4
大数乘法
大数乘法C语言源代码最终版能进行小数或负数的运算
#include <stdio.h>
#include <string.h>
#define N 200
#define M 400
void main()
{
char str1[N],str2[N];
int a[N]={0},b[N]={0},c[N][M]={0},sum[M]={0},len1,len2,i,j,k,num1=0;
gets(str1);
gets(str2); //输入字符串
len1=strlen(str1);
len2=strlen(str2); //获得字符串的长度
if (strcmp(str1,"0")==0||strcmp(str2,"0")==0) //如其中任意一个字符串为零,令输出零
printf("0\n");
else
{
if (strcmp(str1,"0")<0&&strcmp(str2,"0")<0) //如果两个字符串都为负,则两个字符串都向前移一位,屏蔽掉负号
{
for(i=0;i<len1;i++)
str1[i]=str1[i+1];
for(i=0;i<len2;i++)
str2[i]=str2[i+1];
}
if (strcmp(str1,"0")<0&&strcmp(str2,"0")>0) //如果其中之一小于零,输出-号;并将负数字符串往前移一位
{
for(i=0;i<len1;i++)
str1[i]=str1[i+1];
printf("-");
}
if (strcmp(str1,"0")>0&&strcmp(str2,"0")<0) //同上
{
for(i=0;i<len2;i++)
str2[i]=str2[i+1];
printf("-");
}
len1=strlen(str1);
len2=strlen(str2); //由于移位操作,需要再次更正字符串长度
for (i=0;i<len1;i++)
if(str1[i]=='.')
for(j=i;i<len1;i++)
str1[i]=str1[i+1];
else j=len1-1;
for (i=0;i<len2;i++)
if(str2[i]=='.')
for(k=i;i<len2;i++)
str2[i]=str2[i+1];
else
k=len2-1; //判断字符串中是否存在小数点,并记下位置
num1=len1+len2-j-k-2; //相乘后,小数点的位置
len1=strlen(str1);
len2=strlen(str2); //由于移位操作,需要再次更正字符串长度
for(i=len1-1,j=0;i>=0;i--)
a[j++]=str1[i]-'0';
for(i=len2-1,j=0;i>=0;i--)
b[j++]=str2[i]-'0'; //将字符串的值赋给数组
for(j=0,k=0;j<len2;k++,j++)
for(i=0;i<len1;i++)
c[k][j+i]=a[i]*b[j]; //按乘法法则相乘,并将结果放入c[][]二位数组中
for(i=0;i<len2;i++)
for(j=0;j<len1+len2;j++)
{
if(c[i][j]>9)
{
c[i][j+1]=c[i][j+1]+c[i][j]/10;
c[i][j]=c[i][j]%10; //c[][]的值可能大于9,需要做进位处理
}
}
for(i=0,k=0;i<len1+len2;i++,k++)
for(j=0;j<len2;j++)
{
sum[k]=sum[k]+c[j][i];
if (sum[k]>9)
{
sum[k+2]+=sum[k]/100;
sum[k+1]+=sum[k]/10;
sum[k]=sum[k]%10; //将各项值相加,得出最终结果放入sum[]中
}
}
for(i=M-1;(i>=0)&&(sum[i]==0);i--); //找到第一个不是零的数
if(num1>0) //说明存在小数运算
{
if(i<num1) //小数小于1
{
printf("0.");
for(j=num1-i-1;j>0;j--)
printf("0");
for(;i>=0;i--)
printf("%d",sum[i]);
}
else //小数大于1
{
for(;i>=num1;i--)
printf("%d",sum[i]);
printf("."); //找准小数点的位置
for(;i>=0;i--)
printf("%d",sum[i]);
}
}
else //为整数运算
for(;i>=0;i--)
printf("%d",sum[i]);
printf("\n");
}
}。