我正试图解决CodeChef的练习问题。在这个问题中,我们给出N个数字A i ... A n我们首先必须对数字进行排序(升序),然后从最后一个开始添加备用数字并显示每个测试用例的输出,测试用例有2个部分组成:
1>约束:
1≤艾≤10
1≤N≤1000在CodeChef中获取TLE并需要改进代码
2>约束:
1≤艾≤10
1≤N≤10
您可以看到完整问题here。
我的问题的第一部分是成功提交,但第二部分显示NZEC因为我使用long
添加这些数字(超出该范围)。所以我决定用字符串来这里加了我的号码是方法:
public static String myStringWayToAdd(String first , String second){
String temp = "";
if(first.length() < second.length()){
temp = first;
first = second;
second = temp;
}
temp = "";
int carry = 0;
for(int i=1;i<=first.length();++i){
if(i <= second.length()){
carry += Integer.parseInt(first.charAt(first.length()-i)+"") + Integer.parseInt(second.charAt(second.length()-i)+"");
}
else{
carry += Integer.parseInt(first.charAt(first.length()-i)+"");
}
temp += carry%10;
carry = carry/10;
}
if(carry != 0)
temp += carry;
StringBuilder myResult = new StringBuilder(temp);
return(myResult.reverse().toString());
}
但现在它显示TLE(期限到期),于是我想到要用BigInteger的(这我不是非常意识到但我看到一些教程):
BigInteger big = new BigInteger("0");
big = big.add(BigInteger.valueOf(mySort.get(j))); //for addition and mySort is my ArrayList
但这给我NZEC我不知道为什么
现在好了,我想用double
可变的,但有一个问题,太多,因为与d ouble大量将在指数值喜欢的形式:
1.243536E15
将不接受了机器,所以有以什么好办法解决这个问题,并没有得到任何期限届满?
任何帮助将真正被赞赏。先谢谢你。
编辑1:
我改变了可变baxck长和运行,这一次奇怪的是我得到 TLE这里是我的代码:
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.math.BigInteger;
import java.lang.Number;
class CFEA{
public static void main(String[] s){
Scanner scan = new Scanner(System.in);
int testCases = scan.nextInt();
for(int i = 0 ; i<testCases;++i){
long sum = 0;
//BigInteger big = new BigInteger("0");
ArrayList<Integer> mySort = new ArrayList<Integer>();
int n = scan.nextInt();
for(int j = 1 ; j <= n ; ++j){
mySort.add(scan.nextInt());
}
Collections.sort(mySort);
for(int j = mySort.size()-1 ; j >= 0 ; j=j-2){
sum += mySort.get(j);
}
System.out.println(sum);
}
}
}
这里是Link我submission.Is有任何我可以在我的代码优化?
所以我的问题也许是别的东西 – 2014-10-02 17:25:30
@NawedShaikh是的,它不是'长'溢出。 – kraskevich 2014-10-02 17:26:15
奇怪的是,这次我也得到了TLE – 2014-10-02 17:28:53