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();
}
}