c語言實現兩個大數相乘
阿新 • • 發佈:2021-01-08
實現兩個不限位數十進位制整數的乘法函式,
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;
}
執行結果: