kamal nayan Ответов: 4

Умножение двух 200-значное число


Напишите программу на языке java, чтобы умножить число из двух 200 цифр.



TCS Interview Question..plz help

walterhevedeich

Так ты хочешь намекнуть? Или ты хочешь, чтобы мы сделали это за тебя?

4 Ответов

Рейтинг:
2

Anil gola

/*
* 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;
}
}


Рейтинг:
1

OriginalGriff

Подумайте: как бы вы это сделали с карандашом и бумагой?

Длинное умножение:
1234*5678 = 1000 * 5678 + 200 * 5678 + 30 * 5678 + 4 * 5678.

4 * 5678 = 5000 * 4 + 600 * 4 + 70 * 4 + 8 * 4

...


Sergey Alexandrovich Kryukov

Вот именно, мой 5-й. Он также будет нуждаться в некотором понимании программирования, чтобы избежать строкового представления его и работать с массивом битов.
--СА

Рейтинг:
1

Ankit_Tech

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


Richard Deeming

Если ОП не ответил на их вопрос интервью в прошлом году семь лет- Я не думаю , что они получили эту работу!

Рейтинг:
0

CPallini

Поскольку это звучит как домашнее задание, возможно, вы не можете использовать какую-либо большую целочисленную библиотеку. следовательно, начните с двух 200-байтовых факторных массивов и закончите 400-байтовым продуктовым массивом.
Вы должны использовать основные правила, изученные в школе.