import java.math.BigDecimal; import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner cin=new Scanner (System.in); String s1=cin.next(); String s2=cin.next(); BigDecimal b1=new BigDecimal(s1); BigDecimal b2=new BigDecimal(s2); BigDecimal b3=b1.multiply(b2); String s3=String.valueOf(b3); System.out.print(s3); } }
import java.io.*; public class Main { public static void main(String[] argc) throws IOException { InputStreamReader in = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(in); String[] string = reader.readLine().split(" "); System.out.println(stringProduct(string[0], string[1])); } public static String stringProduct(String multiplier, String multiplicand) { StringBuilder sBuilder = new StringBuilder(); int a = multiplicand.length(); int b = multiplier.length(); int result[] = new int[a + b + 1]; for (int i = a - 1; i >= 0; i--) { int multipierInt = multiplicand.charAt(i) - '0'; int resultBit = b + i + 1; for (int j = b - 1; j >= 0; j--) { int multiplicandInt = multiplier.charAt(j) - '0'; int tempResult = multipierInt * multiplicandInt; if (tempResult > 9) { result[resultBit] += tempResult % 10; result[resultBit - 1] += tempResult / 10; } else { result[resultBit] += tempResult; } if (result[resultBit] > 9) { result[resultBit - 1] += result[resultBit] / 10; result[resultBit] = result[resultBit] % 10; } resultBit--; } } boolean start = false; for (int c : result) { if (!start && c == 0 ) { continue; }else{ start = true; } if (start) { sBuilder.append(c); } } return sBuilder.toString(); } }
/** * 字符串形式的大整数相乘 * * @param str1 第一个操作数 * @param str2 第二个操作数 */ static void bigIntMulti(String str1, String str2) { // 数组用来保存每一位的值 int[] res = new int[str1.length() + str2.length()]; int k = res.length - 1; // 最后的结果,但是没有进位 for (int j = str2.length() - 1; j >= 0; j--) { if (j != str2.length() - 1) k += str1.length() - 1; for (int i = str1.length() - 1; i >= 0; i--) { res[k--] += (str1.charAt(i) - '0') * (str2.charAt(j) - '0'); } } // 从后往前处理进位,数组会有前导 0 for (int i = res.length - 1; i > 0; i--) { res[i - 1] += res[i] / 10; res[i] = res[i] % 10; } String resStr = Arrays.toString(res); // 形如 [0,0,1,0,2,0,0] -> 0010200 -> 10200 System.out.println(resStr.replaceAll("\\D", "").replaceAll("^(0+)", "")); }
public class BigInt { public static void main(String[] args) { Scanner in=new Scanner(System.in); String s1=in.next(); String s2=in.next(); String rs=computeX(s1,s2); System.out.println(rs); } private static String computeX(String s1, String s2) { String []s=new String[s2.length()]; for(int i=s2.length()-1;i>=0;i--){ s[i]=compute(s1,s2.charAt(i)); } return addAll(s); } private static String addAll(String[] s) { //计算所有字符串相加 String rs=""; for(int i=0;i<s.length;i++){ for(int j=s.length-1;j>i;j--){ s[i]=s[i]+"0"; } //System.out.println(s[i]); rs=addString(rs,s[i]); //System.out.println(rs); } return rs; } private static String addString(String rs, String s) { String res=""; int jinwei=0; if(rs.length()>s.length()){ String tmp=rs; rs=s; s=tmp; } for(int i=rs.length()-1;i>=0;i--){ int num=rs.charAt(i)-48+s.charAt(i-rs.length()+s.length())-48+jinwei; jinwei=num/10; res=num%10+res; } for(int i=s.length()-rs.length()-1;i>=0;i--){ int num=s.charAt(i)-48+jinwei; jinwei=num/10; res=num%10+res; } if(jinwei!=0){ res=jinwei+res; } return res; } private static String compute(String s1, char charAt) { //计算单个字符与字符串相乘 int x=charAt-48; String rs=""; int jinwei=0; for(int i=s1.length()-1;i>=0;i--){ int num=x*(s1.charAt(i)-48)+jinwei; jinwei=num/10; rs=(num%10)+rs; } if(jinwei!=0){ rs=jinwei+rs; } //System.out.println(rs); return rs; } }
不能用大整数,那就用BigDecimal吧。。。
import java.util.Scanner; import java.math.BigDecimal; public class Main{ public static void main(String [] args){ Scanner sc = new Scanner(System.in); String [] arr = sc.nextLine().split(" "); System.out.println(Cal(arr)); } public static String Cal(String [] arr){ StringBuilder sb0 = new StringBuilder(arr[0]); StringBuilder sb1 = new StringBuilder(arr[1]); sb0.insert(0,"0."); sb1.insert(0,"0."); BigDecimal bd = (new BigDecimal(new String(sb0))).multiply(new BigDecimal(new String(sb1))); sb0 = new StringBuilder(bd.toString()); while(sb0.charAt(0)=='0'||sb0.charAt(0)=='.') sb0.deleteCharAt(0); return sb0.toString(); } }
public class Main {public static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
1. import java.util.Arrays;
2. import java.util.Scanner;
3. public class Main {
4. public static void main(String [] args) {
5. String [] s;
6. int al,bl,rl;
7. Scanner sc= new Scanner(System.in);
8. s=sc.nextLine().split(" ");
9. al=s[0].length();
10. bl=s[1].length();
11. rl=al+bl+1;
12. int [] a=new int [al];
13. int [] b =new int [bl];
14. int[] resulttmp =new int [rl];
15. for(int i=0;i<al;i++)
16. a[i]=s[0].charAt(i)-'0';
17. for(int i=0;i<bl;i++)
18. b[i]=s[1].charAt(i)-'0';
19. for(int i=al-1;i>=0;i--) {
20. for(int k=bl-1;k>=0;k--) {
21. resulttmp[i+k+2]+=a[i]*b[k];
22. resulttmp[i+k+1]+=resulttmp[i+k+2]/10;
23. resulttmp[i+k+2]=Math.floorMod(resulttmp[i+k+2], 10);
24. }
25. }
26. for(int i=0;i<rl;i++) {
27. if(resulttmp[i]!=0) {
28. for(;i<rl;i++)
29. System.out.print(resulttmp[i]);
30. }
31. }
32. }
33. }
import java.math.BigDecimal; import java.util.Scanner; public class test2 { public static void main(String[] args) { Scanner read = new Scanner(System.in); String s1; s1 = read.next(); String s2; s2 = read.next(); Mul(s1, s2); } private static void Mul(String s1, String s2) { int carry; if (s1.length() < s2.length()) { String tmp = s1; s1 = s2; s2 = tmp; } char[] c1 = s1.toCharArray(); char[] c2 = s2.toCharArray(); StringBuilder sb; BigDecimal r; BigDecimal result = new BigDecimal("0"); if (s1.equals("0") || s2.equals("0")) { System.out.println(result); } else { for (int i = c2.length - 1; i >= 0; i--) { sb = new StringBuilder(); if (c2[i] == '1' && c2.length == 1) { result = new BigDecimal(String.valueOf(c1)); } else { carry = 0; for (int j = c1.length - 1; j >= 0; j--) { int temp; int again = 0; temp = Integer.parseInt(String.valueOf(c1[j])) * Integer.parseInt(String.valueOf(c2[i])); if (carry + temp % 10 >= 10) { again++; } sb.append((temp % 10 + carry) % 10); carry = temp / 10 + again; if (j == 0 && carry != 0) { sb.append(carry); } } sb = sb.reverse(); int k = i; while (k < c2.length - 1) { sb.append("0"); k++; } r = new BigDecimal(sb.toString()); result = result.add(r); } } System.out.println(result); } } }
import java.util.*; public class Main { /* 数字字符串 乘以 单个数字字符 */ static String mulOne(String stra, char ch){ return mulOne(stra,ch-'0'); } static String mulOne(String stra, int ch){ StringBuilder ans= new StringBuilder(stra.length()+1); int carry= 0; //进位 for(int i=stra.length()-1; i>=0; --i){ int num= (stra.charAt(i)-'0')*(ch)+carry; ans.insert(0,num%10); carry= num/10; } if(carry>0) ans.insert(0,carry); return ans.toString(); } /* 数字字符串 乘以 数字字符串 */ static String mul(String stra, String strb){ String ans=""; for(int i=1; i<=strb.length(); i++){ String str= mulOne(stra, strb.charAt(strb.length()-i)); String zero=""; for(int j=1; j<i; j++) zero+='0'; ans= addition(ans,str+zero); } return ans; } /* 数字字符串乘 加 数字字符 */ static String addition(String stra, String strb){ int len= Math.max(stra.length(),strb.length()); StringBuilder ans= new StringBuilder(len+1); int carry= 0; for(int i=1; i<=len; i++){ int a= stra.length()-i<0 ? 0 : stra.charAt(stra.length()-i)-'0'; int b= strb.length()-i<0 ? 0 : strb.charAt(strb.length()-i)-'0'; int num = a+b+carry; ans.insert(0,num%10); carry= num/10; } if(carry>0) ans.insert(0,carry); return ans.toString(); } public static void main(String[] args) { Scanner sca= new Scanner(System.in); while (sca.hasNext()){ boolean negative= false;//判断是否未负数 boolean zero= true;//判断是否为0 String stra= sca.next(); if('-'==stra.charAt(0)){ negative= !negative; stra= stra.substring(1); } String strb= sca.next(); if('-'==strb.charAt(0)){ negative= !negative; strb= strb.substring(1); } String ans= mul(stra, strb); int indexNotZero= 0;//第一个非零数字字符的下标,用来去掉前置零 for(int i=0; i<ans.length(); i++){ if('0'!=ans.charAt(i)){ indexNotZero= i; zero= false; break; } } if(zero){ System.out.println('0');//如果结果是零的话,可能输出 “0”、“-0”这样的结果 continue; } if(negative && !zero) System.out.print('-'); System.out.println(ans.substring(indexNotZero)); } } } /* 72106547548473106236 982161082972751393 695423 456982 -695423 456982 -695423 -456982 695423 -456982 0 -11 70820244829634538040848656466105986748 317795793386 * */
//大数运算无脑JAVA
import java.util.Scanner;
import java.math.BigInteger;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
BigInteger a,b,c;
a = sc.nextBigInteger();
b = sc.nextBigInteger();
c = a.multiply(b);
sc.close();
System.out.println(c);
}
}
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String num1 = in.next(), num2 = in.next(); System.out.println(multiply(num1,num2)); } public static String multiply(String num1, String num2) { num1 = new StringBuilder(num1).reverse().toString(); num2 = new StringBuilder(num2).reverse().toString(); //a的长度是(num1.length - 1) + (num2.length - 1) + 1 int[] a = new int[num1.length() + num2.length() - 1]; for (int i = 0; i < num1.length(); i++) { int n1 = num1.charAt(i) - '0'; for (int j = 0; j < num2.length(); j++) { int n2 = num2.charAt(j) - '0'; a[i + j] += n1 * n2; } } StringBuilder sb = new StringBuilder(); int carry = 0; for (int i = 0; i < a.length || carry != 0; i++) { if(i < a.length) carry += a[i]; sb.append(carry % 10); carry /= 10; } return sb.length() == 0 ? "0" : sb.reverse().toString(); } }