编了一个小程序,请高手看看!
//求两多位数相乘结果,用DEV编译通过//方法不是很好,请高手提提意见
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
int main()
{
int tra(char ch);
char *num1;
char *num;
int *num2;
int *temp={0};
int sum[1000]={0};
int num3;
int i=0;
int n=0,m=0;
int t=0,r=0;
int len1=0,len2=0;
int k=0;
int w=0;
int h=0,x=0,j=0;
int e1=0,e2=0,e3=0;
printf("Input number\n");
num1=(char *)malloc(1000);//前乘数分配大小
gets(num1);
fflush(stdin);
num=(char *)malloc(1000);//后乘数分配大小
gets(num);
fflush(stdin);
num2=(int *)malloc(1000);//记录数分配大小
temp=(int *)malloc(1000);//记录数分配大小
len1=strlen(num1);
len2=strlen(num);
for(j=len2-1;j>=0;j--) //后乘数从尾到头
{
k++;
t=0;
num3=tra(num[j]); //转为整数
printf("%d\n",num3);
for(w=k;w>1;w--)
num2[t++]=0;
x=0;
for(i=len1-1;i>=0;i--)//前乘数从尾到头
{
m=tra(num1[i]);//转为整数
printf("%d\n",m);
n=num3*m; //后数乘以前数
h=(n+x)%10; //取个位
x=(n+x)/10; //取十位
num2[t++]=h; // 记录位数
}
if(x!=0)
num2[t++]=x;
num2[t]='\0';
temp=num2;
for(w=t-1;w>=0;w--)
printf("%d",temp[w]);
printf("\n");
e3=0;e2=0;e1=0;
for(w=0;w<t;w++)
{
e1=temp[w]+sum[w]+e3;
e2=e1%10;
e3=e1/10;
sum[w]=e2;
}
if(e3!=0)
sum[w++]=e3;
sum[w]='\0';
}
int p=0;
for(p=w-1;p>=0;p--)
printf("%d",sum[p]);
getch();
return 0;
}
int tra(char ch)
{
char *str;
int m;
str=(char *)malloc(6);
str[0]=ch;
str[1]='\0';
m=atoi(str);
return m;
}