我正試圖解決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