//逆序函式
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...