Умножение двух 200-значное число
Напишите программу на языке java, чтобы умножить число из двух 200 цифр.
TCS Interview Question..plz help
walterhevedeich
Так ты хочешь намекнуть? Или ты хочешь, чтобы мы сделали это за тебя?
Так ты хочешь намекнуть? Или ты хочешь, чтобы мы сделали это за тебя?
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package javaapplication5; /** * * @author Anil Gola */ import java.util.*; public class JavaApplication5 { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Scanner scan = new Scanner(System.in); System.out.println("enter first no"); String a=scan.next(); System.out.println("enter second no"); String b=scan.next(); JavaApplication5 mult=new JavaApplication5(); int [] f = convert(a); int [] s = convert(b); String [] result = mult.multiply(f, s); String [] mresult = arrange(result); String sum="0"; for(int k=0;k<mresult.length;k++)> { sum = add(sum,mresult[k]); } System.out.println(sum); } public static String add(String a1, String b1) { int [] a = convert(a1); int [] b = convert(b1); int l = a.length-1; int m = b.length-1; int sum =0; int carry = 0; int rem = 0; String temp = ""; if(a.length>b.length) { while(m>=0) { sum = a[l] + b[m] + carry; carry = sum/10; rem = sum%10; temp = rem + temp; m--; l--; } while(l>=0) { sum = a[l] + carry; carry = sum/10; rem = sum%10; temp = rem + temp; l--; } if(carry>0) { temp = carry + temp; } } else { while(l>=0) { sum = a[l] + b[m] + carry; carry = sum/10; rem = sum%10; temp = rem + temp; m--; l--; } while(m>=0) { sum = b[m] + carry; carry = sum/10; rem = sum%10; temp = rem + temp; m--; } if(carry>0) { temp = carry + temp; } } return temp; } public static int [] convert(String a) { int [] temp = new int[a.length()]; for(int i=0;i<a.length();i++)> { temp[i] = Character.digit(a.charAt(i), 10); } return temp; } public static String [] arrange(String [] result) { for(int i=0;i<result.length;i++)> { int j=0; while(j<i)> { result[i] = result[i] + "0"; j++; } } return result; } public String[] multiply(int [] a,int [] b) { String [] temp = new String[b.length]; for(int i=b.length-1;i>=0;i--) { int carry=0; int result=0; int rem=0; temp[b.length-i-1]=""; for(int j=a.length-1;j>=0;j--) { result = a[j]*b[i] + carry; carry = result/10; rem = result%10; temp[b.length - i-1]= rem + temp[b.length - i-1]; } if(carry>0) { temp[b.length -i-1] = carry + temp[b.length -i -1]; } } return temp; } }
Подумайте: как бы вы это сделали с карандашом и бумагой?
Длинное умножение:
1234*5678 = 1000 * 5678 + 200 * 5678 + 30 * 5678 + 4 * 5678.
4 * 5678 = 5000 * 4 + 600 * 4 + 70 * 4 + 8 * 4
...
Вот именно, мой 5-й. Он также будет нуждаться в некотором понимании программирования, чтобы избежать строкового представления его и работать с массивом битов.
--СА
package com.logical.multiply; import java.io.*; public class StringMulti { static String flag = "0"; public static void main(String[] args) throws IOException { String total = ""; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Enter The First No"); String s = new String(br.readLine()); System.out.println("Enter The Second No"); String s1 = new String(br.readLine()); if(s.length() > s1.length()) { total = cal(s,s1); } else { total = cal(s1,s); } System.out.println("Total = " + total); } public static String cal(String s, String s1) { String sum = ""; for(int i = s1.length()-1; i>=0; i--) { String mul = multiply(s,s1.charAt(i)+""); sum = sum(mul,sum); } return sum; } public static String multiply(String s, String s1) { int carry = 0; int n = s1.charAt(0)-48; String mul = ""; for(int i = s.length()-1; i >= 0; i--) { mul = (n*(s.charAt(i)-48) + carry) % 10 + mul; carry = ((n*(s.charAt(i)-48) + carry) / 10) !=0 ? (n*(s.charAt(i)-48) + carry) / 10 : 0; } mul = carry > 0 ? carry + mul : mul; return mul; } public static String sum(String s, String s1) { int add = 0, diff = 0; String temp = ""; int carry = 0; String tot = ""; if(s1 == "") { s1 = s; return s1; } else { s = s + flag; flag = flag + "0"; if(s.length() < s1.length()) { temp = s; s = s1; s1 = temp; } int j = s1.length()-1; for(int i = s.length() - 1 ; i >= 0 && j >= 0; i--, j--) { add = (s.charAt(i)-48 + s1.charAt(j)-48) + carry; carry = add / 10; tot = add % 10 + tot ; } diff = s.length() - s1.length(); if(diff != 0) tot = carry > 0 ? s.substring(0, diff-1)+(s.charAt(diff-1)-48+carry)+tot : s.substring(0, diff-1)+(s.charAt(diff-1)-48)+tot; else tot = carry > 0 ? carry + tot : tot; } return tot; } }
Если ОП не ответил на их вопрос интервью в прошлом году семь лет- Я не думаю , что они получили эту работу!
Поскольку это звучит как домашнее задание, возможно, вы не можете использовать какую-либо большую целочисленную библиотеку. следовательно, начните с двух 200-байтовых факторных массивов и закончите 400-байтовым продуктовым массивом.
Вы должны использовать основные правила, изученные в школе.