高精度乘法

高精度乘法,是指計算超過標準數據類型能夠表達的計算範圍的乘法計算。

如果計算機結果已經超過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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章