如何乘以作爲字符串輸入的兩個100位數字。 注意:我們不允許使用BigInteger或BigDecimal類的java。非常大的數字產品
Q
非常大的數字產品
-5
A
回答
2
你所能做的就是讓你在高中時學到的東西相乘。因此,您取第二個數字的最低位數,並在第一個數字上進行迭代,然後執行第二個數字並將結果加起來,直到您獲得總數。基本上,你只需簡單地自動化你通常手工完成的工作。
爲了給你如何做到這一點我可以告訴你下面的代碼,因爲我覺得這樣的問題極其困難的初級程序員的例子。它應該顯示出良好的程序構成和很多完成任務所需的技術。
這當然是錯過了一個重要的實施,雖然:)。
public class DecimalNumber {
public static String multiply(String x, String y) {
String intermediateResult = "0";
for (int i = 0; i < y.length(); i++) {
char ydc = y.charAt(y.length() - i - 1);
int yd = toDigitValue(ydc);
String result = multiply(yd, x);
String shiftedResult = shift(i, result);
intermediateResult = add(intermediateResult, shiftedResult);
}
return intermediateResult;
}
private static String add(String x, String y) {
int digitsToAdd = Math.max(x.length(), y.length());
StringBuilder result = new StringBuilder(1 + digitsToAdd);
int carry = 0;
for (int i = 0; i < digitsToAdd; i++) {
int xd;
if (i >= x.length()) {
xd = 0;
} else {
char xdc = x.charAt(x.length() - i - 1);
xd = toDigitValue(xdc);
}
int yd;
if (i >= y.length()) {
yd = 0;
} else {
char ydc = y.charAt(y.length() - i - 1);
yd = toDigitValue(ydc);
}
int digitAdd = xd + yd + carry;
if (digitAdd >= 10) {
carry = digitAdd/10;
digitAdd = digitAdd % 10;
} else {
carry = 0;
}
char digitMulChar = toDigitCharacter(digitAdd);
result.insert(0, digitMulChar);
}
if (carry != 0) {
result.insert(0, carry);
}
return result.toString();
}
private static String shift(int shift, String valueToShift) {
StringBuilder result = new StringBuilder(valueToShift.length() + shift);
result.append(valueToShift);
for (int i = 0; i < shift; i++) {
result.append('0');
}
return result.toString();
}
private static String multiply(int yd, String x) {
// TODO implement
throw new IllegalStateException("Method not implemented");
}
private static int toDigitValue(char digitAsCharacter) {
return Integer.parseInt("" + digitAsCharacter);
}
private static char toDigitCharacter(int digitValue) {
return Character.forDigit(digitValue, 10);
}
public static void main(String[] args) {
System.out.println(multiply("999", "999"));
}
}
我居然發現這種代碼軟件一次。不要這樣做,只需使用一個以字節爲單位的大整數庫。或者,如果您想要任何類型的性能,則需要64位long
值。
請注意,如果您已經對如何進行快速的二進制行動的經驗教訓,你可能需要複製,除上述問題的答案。
+0
注意,這是種這個問題的想法,瞭解如何將您在現實生活中已經解決的問題轉換爲適用於計算機的解決方案。所以下一次你遇到這些問題之一時,試着將邏輯應用到你已經擁有的知識上。 –
+1
也可以做俄羅斯農民增殖。 –
相關問題
- 1. PHP/mySQL產品系統(非常一般)
- 2. Magento 1.9.1 - 保存產品非常慢
- 3. 使用CUDA計算(非常)大型矩陣產品
- 4. 函數用於乘以非常小或非常大的數字
- 5. 由標量opencv矩陣劃分產生非常大/小數字
- 6. Exponentiate非常大的數字中的R
- 7. 最大的產品
- 8. C++ - 一個非常非常大的數字
- 9. 使用大產品的產品ID獲取產品sku在Magento
- 10. 查找非常大的數字
- 11. 增加非常大的數字在VB.NET
- 12. C++中功耗非常大的數字
- 13. decimal.InvalidOperation,DivisionImpossible非常大的數字
- 14. 顯示非常大的數字,用byte []
- 15. 處理非常大的數字
- 16. 如何排序非常大的數字
- 17. BigDecimal.movePointRight()掛起非常大的數字
- 18. Streamtokenizer讀取非常大的數字?
- 19. vb.net中非常大的數字
- 20. 具有固定的最大產品數量的清單產品
- 21. 輸入數字的產品
- 22. Numpy dot產品非常緩慢地使用整數
- 23. 用於非常大型數據的XMLSerializer的替代品
- 24. 本身劃分浮點數產生非常大的整數
- 25. 尋找兩個非常大的數字乘以一個非常大的數字的模數
- 26. Magento後端非常緩慢打開產品時,大量的價格增加
- 27. Python:數字範圍非常大?
- 28. 非默認存儲的可配置產品的產品名稱
- 29. 非常大在一個非常大的B分數
- 30. 算法爲大數非常大的數字(C++)
提示:位或字符串 –
坦白? [計算機程序設計藝術(http://www-cs-faculty.stanford.edu/~uno/taocp.html),第2卷,第4.3節 – dhke