高精度乘法,是指計算超過標準數據類型能夠表達的計算範圍的乘法計算。
如果計算機結果已經超過long long所能表示的範圍,將會得到溢出後的答案(結果不正確,也不能計算)
這時候就需要用到高精度乘法算法,所謂高精度乘法算法,就是通過錄入字符數組的形式保存數字爲字符串,然後逐一取出錄入的數字字符,轉換成對應的int數字進行計算,然後利用計算機善於重複循環處理數據的特點,模擬乘法豎式的計算過程,通過進位和錯位相加的形式,得到高精度計算結果。
#include<stdio.h>
#include<string.h>
int main()
{
int c[100000]={0};
int k=0,carry=0,x=1,i;
char a[100000],b[100000];
gets(a);
gets(b);
int a_length=strlen(a),b_length=strlen(b);
//乘法豎式的方法👇
for( i=a_length-1;i>=0;i--)
{
for(int j=b_length-1;j>=0;j--)
{
c[k]=(a[i]-'0')*(b[j]-'0')+carry+c[k];
carry=c[k]/10;//carry 進位
c[k]%=10;
k++;
}
c[k]+=carry;//可能最高位有進位
carry=0;//被乘數的第k+1個數開始,carry清0
k=x;//————錯位相加
x++;
}
for( i=10000-1;i>0;i--)
if(c[i]) break;//去掉前導0
for(int j=i;j>=0;j--)
printf("%d",c[j]);//逆序輸出
return 0;
}