实现两个不限位数十进制整数的乘法函数,
demon
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,z,k;
int f_m1,f_m2,f_k;
int carry;
int result_int_len;
int x_len,y_len;
int x[101], y[101];
char multiplier_x[101];
char multiplier_y[101];
char result_char[100000];
int reuslt_int[100000];
memset(result_char,0,sizeof(result_char));
memset(reuslt_int,0,sizeof(reuslt_int));
memset(multiplier_x,0,sizeof(multiplier_x));
memset(multiplier_y,0,sizeof(multiplier_y));
scanf("%s%s",multiplier_x,multiplier_y);
x_len = strlen(multiplier_x);
y_len = strlen(multiplier_y);
for(i = 0; i < x_len ; i++)
{
x[i] = multiplier_x[i] - '0';
printf("===========x[%d] is %d\n",i,x[i]);
}
for(j = 0; j < y_len ; j++)
{
y[j] = multiplier_y[j] - '0';
printf("===========y[%d] is %d\n",j,y[j]);
}
f_m1 = x_len;
for(i = 0; i < x_len ; i++)
{
f_m1--;
f_m2 = y_len;
for(j = 0; j < y_len ; j++)
{
f_m2--;
z = x[f_m1] * y [f_m2];
printf(" z is %d\n",z);
reuslt_int[j+i] = z%10 + reuslt_int[j+i];
k = j+i+1;
printf("====k is %d | reuslt_int[j+i] is %d\n",k,reuslt_int[j+i]);
if(reuslt_int[j+i] > 9)//判断是否需要进位
{
reuslt_int[j+i] = reuslt_int[j+i]%10;
carry = j+i+1;
reuslt_int[carry] = 1 + reuslt_int[carry];
printf("[%d] reuslt_int[%d] is %d\n",__LINE__,i+j,reuslt_int[j+i]);
while( 9 < reuslt_int[carry])//进位之后相加再判断是否需要进位
{
reuslt_int[carry] = reuslt_int[carry]%10;
carry++;
printf("||||=====carry is %d \n",carry);
reuslt_int[carry] = 1 + reuslt_int[carry];
}
}
if(z > 9)//判断是否需要进位
{
carry = j+i+1;
reuslt_int[carry] = z/10 + reuslt_int[carry];
printf("[%d] reuslt_int[%d] is %d\n",__LINE__,i+j,reuslt_int[carry]);
while( 9 < reuslt_int[carry])//进位之后相加再判断是否需要进位
{
reuslt_int[carry] = reuslt_int[carry]%10;
carry++;
printf("[%d] reuslt_int[%d] is %d\n",__LINE__,i+j,reuslt_int[carry]);
reuslt_int[carry] = 1 + reuslt_int[carry];
}
k = j+i+2;
printf("k is %d\n",k);
}
}
}
f_k = k;
for(i = 0; i < f_k ; i++)//位数反转
{
result_char[i] = reuslt_int[k-1] + '0';
printf(" result_char[%d] is %d\n",i,result_char[i]);
k--;
}
printf("===========%s \n",result_char);
return 0;
}
运行结果: