\$\begingroup\$
\$\endgroup\$
3
Please suggest a way to optimize the below code. I want to reduce the execution time. This is a program to multiply using the shift operator.
import java.util.Scanner;
public class Test2 {
public static void main(String args[] ) throws Exception {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
long[] [] list=new long[N][2];
for(int i=0;i<N;i++){
list[i][0]=in.nextLong();
list[i][1]=in.nextLong();
}
for(long[] s:list){
System.out.println(calc(s[0], s[1]));
}
}
public static String calc(long n1, long n2) {
long temp, i = 0, result = 0;
String s=null;
while (n2 != 0) {
if ((n2 & 1) == 1) {
temp = n1;
if(s==null){
s="("+i+"-"+i+") ";
}else{
s=s+"("+i+"-"+i+") + ";
}
result += (temp<<=i);
}
n2 >>= 1;
i++;
}
return s;
}
}
TheCoffeeCup
9,5164 gold badges38 silver badges96 bronze badges
asked Dec 19, 2015 at 14:56
1 Answer 1
\$\begingroup\$
\$\endgroup\$
The first thing I see is concatenating a string in a loop. This will create a new string every loop. You don't want that.
Instead use a StringBuilder:
public static String calc(long n1, long n2) {
long temp, i = 0, result = 0;
StringBuilder s=new StringBuilder();
while (n2 != 0) {
if ((n2 & 1) == 1) {
temp = n1;
if(s.length()!=0)s.append("+ ");
s.append("(").append(i).append("-").append(i).append(") ");
result += (temp<<=i);
}
n2 >>= 1;
i++;
}
return s.toString();
}
answered Dec 19, 2015 at 16:35
lang-java
(0-0) (1-1) +
. If I input 2 and 3, I get the same result. If I input 1001 and 0110, I get(3-3) (6-6) +
, which is also what I get with 101 and 0110. I'm quite unsure what is expected as input, and what is delivered as output. \$\endgroup\$