陣列模擬乘法(大數乘法)
阿新 • • 發佈:2018-12-28
A * B Problem
Input
Each line contain two integers A and B. Procss to end of file.(EOF)
Output
For each case, Please output the value of A multiply B
Sample Input 1
3 2
1 5
Sample Output 1
6
5
思路:
用小學數學的乘法的方法,程式碼如下:
#include<stdio.h>
#include<string.h>
int main ()
{
char arr1[101],arr2[101];
int a[101],b[101],c[201],i,j,k;
while(scanf("%s%s",&arr1,&arr2)!=EOF)
{
int n=strlen(arr1);
int m=strlen(arr2);
k=n+m;//倆數相乘小於倆數的位數相加
memset(c,0,sizeof(c));//陣列初始化
for(i=0;i<n;i++)a[i]=arr1[n-1-i]-'0';//數倒序儲存到另一個數組
for (i=0;i<m;i++)b[i]=arr2[m-1-i]-'0';
for(i=0; i<n; i++)
for(j=0; j<m; j++)
c[i+j]+=a[i]*b[j],c[i+j+1]+=c[i+j]/10,c[i+j]=c[i+j]%10;//相乘和進位
i=k;
while(c[i]==0&&i>0)i--;//去掉前導
for(;i>=0;i--)printf("%d",c[i]);
printf("\n");
}
return 0;
}