文字列として入力された2つの100桁の数字を乗算する方法。 注:BigIntegerクラスまたはBigDecimalクラスのjavaは使用できません。非常に大量の製品
非常に大量の製品
答えて
あなたができることは、高校で学んだ方法を乗算することです。したがって、2番目の数字の最下位桁を取り、最初の数字よりも上に向かって繰り返してから、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
の値を使用します。
すでに高速バイナリ操作の実行方法に関するレッスンがある場合は、おそらく上記の回答よりも複製する必要があることに注意してください。
この質問の考え方は、実生活ですでに解決している問題を、コンピュータでうまくいくソリューションに変換します。次回は、これらの質問の1つを取得して、あなたがすでに持っている知識に論理を適用してみてください。 –
ロシアの農民の繁殖もできます。 –
- 1. WooCommerceで大量の製品をアップデートする最速の方法
- 2. PHP/mySQL製品システム(非常に一般的)
- 3. Pythonのitertools製品のメモリ消費量
- 4. codeigniterの製品の誤った量
- 5. MyBatisで非常に大量のデータを扱う
- 6. woocommerce製品のカスタム数量ページ
- 7. 固定数量の製品変数
- 8. Woocommerce製品ウィジェットの特定の製品を非表示
- 9. LINQ-to-SQLと大量変更が非常に遅いです。
- 10. Oracle:製品在庫対数量トリガー
- 11. プロジェクトオイラー#8シリーズ中の最大の製品
- 12. グリッド内で最大4個の製品
- 13. 最大ペアワイズ製品用のPython
- 14. 私のPOSテーブルの数量を製品テーブルの数量に引く方法
- 15. 非連続データのサック製品
- 16. HBaseに大量のデータを保存するのが非常に遅い
- 17. アニメーションテクスチャの品質が非常に悪い
- 18. 非常に大量のファイルを含むファイル管理のためのスクリプティング
- 19. 非常に大きなタイムスタンプ
- 20. 非常に大量の配列を作成するときのMemoryError
- 21. DBへの大量のExcelインポートがSymfonyで非常に遅くなる
- 22. 大量のデータでEntityFrameworkの挿入速度が非常に遅い
- 23. 請求ステップ中に製品の数量を変更するmagento
- 24. マゼンタで製品数量のバリエーションを追加するには?
- 25. SourceKitService非常に高いメモリ使用量
- 26. Opencart 3製品は、製品
- 27. 非常に大量のデータを複数回Java InputStreamから読み取る
- 28. 非常に大量のデータを含むSQLクエリを最適化する
- 29. SQL Server 2005で非常に大量のデータを並べ替える
- 30. WooCommerce 3.x - 製品カテゴリを非表示
ヒント:ビットまたは文字列 –
率直に言って、 [コンピュータプログラミングの技術](http://www-cs-faculty.stanford.edu/~uno/taocp.html)、第2巻、セクション4.3 – dhke