Our class assignment is to add, subtract, multiply, and divide two huge ints i'm currently working on my multiply function and my multiply isn't working and i cannot pin point the problem.
When i input 3*3 it inputs 9 but when you input 4*4 it outputs 6 (the carryover function doesn't seem to work to the tens place)
This is also apparent in the function 13*13=169 but 14*14 prints 186 (carryover error)?
the multiply function goes through how multiplication works eg. 49*49= 40*40+40*9+9*9 and it multiplies then adds and the power function denotes the place holder eg. if power is 39 that means the value is 4 *10^39.
//Computer Science period 2
//WVHS
import java.util.*;
public class HugeInteger {
static int max=40;
static Scanner in = new Scanner(System.in);
static int multiplyend[]=new int[80];
public static void main(String[] args)
{
int chooser=0;
int array1[]=new int[max];
int array2[]=new int[max];
int dummy[]=new int[max];
int multiplydummy[]=new int[max*2];
int multiplydummy2[]=new int[max*2];
int switcher[]=new int[max*2];
for(int i=0; i<max*2; i++)
{
multiplydummy[i]=0;
multiplydummy2[i]=0;
switcher[i]=0;
}
setnumber(array1);
setnumber(array2);
while(chooser<=11)
{
switch(chooser)
{
case 1:
{
add(array1,array2,dummy);
System.out.print("array1+array2= ");
printnumber(dummy);
break;
}
case 2:
{
subtract(array1,array2,dummy);
System.out.print("array1-array2= ");
printnumber(dummy);
break;
}
case 3:
{
multiply(array1, array2, multiplydummy, multiplydummy2);
System.out.print("array1*array2 = ");
printnumbermultiply();
break;
}
case 4:
{
break;
}
case 5:
{
System.out.println("Is array1 equal to array2?"+isEqualTo(array1,array2));
break;
}
case 6:
{
System.out.println("Is array1 not equal to array2?"+ isNotEqualTo(array1,array2));
break;
}
case 7:
{
System.out.println("Is array1 greater then array2? "+isGreaterThan(array1,array2));
break;
}
case 8:
{
System.out.println("is array1 smaller than array2 "+isLessThan(array1, array2));
break;
}
case 9:
{
System.out.println("array1 greater than or equal to array2 "+isGreaterThanOrEqualTo(array1,array2));
break;
}
case 10:
{
System.out.println("array1 less than or equal to array2 "+isLessThanOrEqualTo(array1,array2));
break;
}
case 11:
{
System.out.println("is array1 zero? " + iszero(array1));
System.out.println("is array2 zero? "+ iszero(array2));
break;
}
}
chooser = menu();
}
}
public static void setnumber(int a[])
{
String transfer;
System.out.println("Please input numbers");
transfer=in.nextLine();
for(int g=transfer.length()-1; g>=0; g--)
{
a[max-1]=(transfer.charAt(g)-48);
max--;
}
max=40;
return;
}
public static boolean iszero(int b[])
{
int a=0;
for(int i=0;i<max;i++)
a=a+b[i];
if(a==0)
return true;
return false;
}
private static int menu()
{
Scanner input = new Scanner( System.in );
System.out.println( "1. Add" );
System.out.println( "2. Subtract" );
System.out.println( "3. Multiply" );
System.out.println( "4. Divide" );
System.out.println( "5. Are they Equal?" );
System.out.println( "6. Are they Not Equal?" );
System.out.println( "7. Are they Greater Than?" );
System.out.println( "8. Are They Less Than?" );
System.out.println( "9. Are they Greater Than or Equal To?" );
System.out.println( "10. Are they Less Then or Equal To?" );
System.out.println( "11. Are any of them zero?");
System.out.println( "12. Exit" );
System.out.print( "Choice: " );
return input.nextInt();
}
public static void add(int a[], int b[], int c[])
{
int carryover=0,sum,i;
for(i=max-1;i>=0;i--)
{
sum=a[i]+b[i]+carryover;
c[i]=sum%10;
carryover=sum/10;
}
return;
}
public static void printnumber(int a[])
{
int start,i=0;
while(i<max&&a[i]==0)
{
i++;
}
start=i;
for(int k=start; k<max;k++)
{
System.out.print(a[k]);
}
System.out.println();
}
public static int getnumbers(int a[])
{
int i;
i=max-1;
while(i>0&&a[i]==0)
i--;
return i;
}
public static void subtract(int a[],int b[],int c[])
{int dummy=1;
if(isLessThan(a,b))
{
dummy=-1;
sub(b,a,c,dummy);
}
else
sub(a,b,c,dummy);
return;
}
public static void sub(int a[],int b[],int c[],int dummy)
{
int d[]=new int[max];
int i,j;
for(i=0;i<max;i++)
{
d[i] = a[i];
c[i]=0;
}
for(i=0;i<max;i++)
{
if(d[i]>=b[i])
c[i]=d[i]-b[i];
else
{
j=i-1;
d[j]--;
d[i]+=10;
i--;
}
}
i=max-1;
while(i>0&&a[i]==0)
i--;
return;
}
public static boolean isGreaterThanOrEqualTo(int a[],int b[])
{if(isGreaterThan(a,b)||isEqualTo(a,b))
return true;
else
return false;
}
public static boolean isLessThanOrEqualTo(int a[],int b[])
{if(isLessThan(a,b)||isEqualTo(a,b))
return true;
else
return false;
}
public static boolean isLessThan(int a[],int b[])
{int beginningofa,bstart,i;
beginningofa=getnumbers(a);
bstart=getnumbers(b);
if(beginningofa>bstart)
return false;
if(beginningofa<bstart)
return true;
for(i=beginningofa;i>=0;i--)
if(a[i]>b[i])
return false;
return true;
}
public static boolean isGreaterThan(int a[],int b[])
{int astart,bstart,i;
astart=getnumbers(a);
bstart=getnumbers(b);
if(astart<bstart) //a has less digits than b so can't be
return false;
if(astart>bstart)
return true; //a has more digits than b so has to be
for(i=astart;i>=0;i--)
if(a[i]<b[i])
return false;
return true;
}
public static boolean isEqualTo(int a[],int b[])
{
for(int i=0;i<max;i++)
if(a[i]!=b[i])
return false;
return true;
}
public static boolean isNotEqualTo(int a[],int b[])
{
for(int i=0;i<max;i++)
if(a[i]!=b[i])
return true;
return false;
}
public static void multiply(int a[], int b[], int adder1[], int adder2[])
{
int p=39, o=39, power, sum, carryover=0;
for(p=39; p>=0; p--)
{
for(o=39; o>=0; o--)
{
int x=a[p]*b[o];
power=p+o;
adder1[power+1]=x/10;
adder1[power]=x%10;
for(int k=79; k>=0; k--)
{
sum=adder1[k]+adder2[k]+carryover;
multiplyend[k]=sum%10;
carryover=sum/10;
}
for(int l=79; l>=0; l--)
{
adder1[l]=0;
}
adder2=multiplyend;
}
}
}
public static void printnumbermultiply()
{
int start,i=0;
while(i<max*2&&multiplyend[i]==0)
{
i++;
}
start=i;
for(int k=start; k<(max*2)-1;k++)
{
System.out.print(multiplyend[k]);
}
System.out.println();
}
}