大數加減乘除法

2021-09-04 12:00:30 字數 1686 閱讀 9421

//逆序函式

void rev(char str, int len)

}

大數加法:

首先將兩個大數儲存到陣列中,然後對陣列逆序後進行逐位分別相加,相加後判斷是否有進製(用carry變數來記錄)。

**實現:

//加法

int main()

if(carry == 1) putchar('1');

for(int i = len - 1; i >=0 ; --i)

putchar(c[i]);

puts("");

return 0;

}

大數減法:

與大數的加法類似,減法運算可以看做異號加法,結果的最大位數和較大的減數字數相同,可以把被減數缺少的位數用零補全然後相減,也可以只減到被減數的位數,然後將減數的高位直接寫到結果的陣列中。

int main()

c[i] = ai - bi + '0';

int flag = 1;

// 1 0 6 0 0

for(int i = len - 1; i >= 0; i--)

puts("");

}return 0;

}

*大數乘法:

對於大數乘法運算以乘法的每一位去乘以被乘數。例如,首先以乘數的個位去乘被乘數,將結果通過進製處理後儲存到結果位中。接著用乘數的十位去乘以被乘數,將每位計算結果累加到最終結果中。注意:兩個數相乘最大的位數是兩個乘數的位數之和,在乘法中我們需要每執行一次乘法就要對陣列進行進製的處理。

大數乘法函式實現**:

void bigintmul(pbigint num1,pbigint num2,pbigint result)

if(carry>0)

else

result->digit=i+j; //儲存結果位數

} result->sign=num1->sign * num2->sign; //結果的符號

}

大數除法:

對於大數除法運算,首先取被除數的最高兩位作為部分被除數,去除以除數,根據該部分被除數與除數的結果——商,得到一位數的商。 除法對資料有限制不能分母為零,分母為零沒有意義;不能用小數除以大數。

**實現(返回的結果是儲存商的陣列的指標,不包含餘數。)

void bigintdiv(pbigint num1,pbigint num2,pbigint result,pbigint residue)

result->num[m++]=k; //儲存商

}result->digit=m; //儲存商的位數

for(i=0;inum[i];

result->num[i]=result->num[m-1-i];

result->num[m-1-i]=t;

} biginttrim(result); //整理商

biginttrim(residue); //整理餘數

}

大數加減乘除

include include include include includeusing namespace std compare比較函式 相等返回0,大於返回1,小於返回 1 int compare string str1,string str2 if cf 0 str char cf 0 st...

大數加減乘除

對於大數的加減乘除都要先把輸入的大數字串轉成倒序的陣列,再進行運算。字串的處理 scanf s s a1,b1 len 0 for int i strlen a1 1 i 0 i len 0 for int i strlen b1 1 i 0 i len max strlen a1 strlen b...

大數的加減乘除

當數的位數非常大而常規的資料型別不足以儲存的時候,可以考慮使用大數。即用乙個長的陣列來儲存相應的位數,如int a 100 a的每一位儲存一位數字或幾位數字,根據常規的加減乘除運算對陣列進行操作。使用string型別對陣列進行操作,雖然比用整型簡便,但可 能增加了執行時間。pku1001 expon...