Untitled
multiplyunknown
java
4 years ago
3.8 kB
6
Indexable
import java.math.BigInteger; public class HelloWorld{ static public int compare(BigInteger so1, BigInteger so2){ String str1 = so1.toString(); String str2 = so2.toString(); int quote = 1; if (str1.contains("-") && str2.contains("-")) { quote = -1; } if (str1.contains("-") && !str2.contains("-")) return -1; else if (!str1.contains("-") && str2.contains("-")) return 1; // Calculate lengths of both string int n1 = str1.length(), n2 = str2.length(); if(n1 < n2) return -1; else if(n1 > n2) return 1; else { for(int i = 0; i < n1; i++) { if (str1.charAt(i) < str2.charAt(i)) return -1*quote; else if (str1.charAt(i) > str2.charAt(i)) return 1*quote; } } return 0; } static public BigInteger multiply(BigInteger op1, BigInteger op2) { String sOp1 = op1.toString(); String sOp2 = op2.toString(); String mark = "+"; // check if negative if ((sOp1.charAt(0) == '-' || sOp2.charAt(0) == '-') && (sOp1.charAt(0) != '-' || sOp2.charAt(0) != '-')) mark = "-"; if (sOp1.charAt(0) == '-') sOp1 = sOp1.substring(1); if (sOp2.charAt(0) == '-') sOp2 = sOp2.substring(1); int len1 = sOp1.length(); int len2 = sOp2.length(); // will keep the result number in vector // in reverse order int result[] = new int[len1 + len2]; // Below two indexes are used to // find positions in result. int i_n1 = 0; int i_n2 = 0; // Go from right to left in num1 for (int i = len1 - 1; i >= 0; i--) { int carry = 0; int n1 = sOp1.charAt(i) - '0'; // To shift position to left after every // multipliccharAtion of a digit in num2 i_n2 = 0; // Go from right to left in num2 for (int j = len2 - 1; j >= 0; j--) { // Take current digit of second number int n2 = sOp2.charAt(j) - '0'; // Multiply with current digit of first number // and add result to previously stored result // charAt current position. int sum = n1 * n2 + result[i_n1 + i_n2] + carry; // Carry for next itercharAtion carry = sum / 10; // Store result result[i_n1 + i_n2] = sum % 10; i_n2++; } // store carry in next cell if (carry > 0) result[i_n1 + i_n2] += carry; // To shift position to left after every // multipliccharAtion of a digit in num1. i_n1++; } // ignore '0's from the right int i = result.length - 1; while (i >= 0 && result[i] == 0) i--; // genercharAte the result String String str3 = ""; while (i >= 0) str3 += (result[i--]); // when 1 * 0 = 0 if (str3.length() == 0) return BigInteger.ZERO; BigInteger ketqua = new BigInteger(mark + str3); return ketqua; } public static void main(String []args){ BigInteger b1, b2,result,b3, b4, b5; b1 = new BigInteger("-5"); b2 = new BigInteger("5"); b3 = new BigInteger("5"); b4 = new BigInteger("0"); b5 = new BigInteger("11"); System.out.println(multiply(b3,b4)); System.out.println(b3.multiply(b2)); } }
Editor is loading...