import java.io.*;
import java.util.ArrayList;
public class Ristsumma {
static long numberFromFile;
static long sum1, sum2;
static long number, number2;
static long variable, variable2;
static long counter;
public static void main(String args[]) throws IOException{
try{
BufferedReader br = new BufferedReader(new FileReader("ristsis.txt"));
numberFromFile = Long.parseLong(br.readLine());
br.close();
}catch(Exception e){
e.printStackTrace();
}
variable=numberFromFile;
ArrayList<Long> numbers = new ArrayList<Long>();
while (variable > 0){
number = variable %10;
variable/=10;
numbers.add(number);
}
for (int i=0; i< numbers.size(); i++) {
sum1 += numbers.get(i);
}
ArrayList<Long> numbers2 = new ArrayList<Long>();
for(long s=1; s<numberFromFile; s++){
variable2=s;
number2=0;
sum2=0;
while (variable2 > 0){
number2 = variable2 %10;
variable2/=10;
numbers2.add(number2);
}
for (int i=0; i< numbers2.size(); i++) {
sum2 += numbers2.get(i);
}
if(sum1==sum2){
counter+=1;
}
numbers2.clear();
}
PrintWriter pw = new PrintWriter("ristval.txt", "UTF-8");
pw.println(counter);
pw.close();
}
}
だから私はこのコードを持っています。ファイルから数値を取得し、その数値とは別にすべての数値を追加し、それらを合計します (たとえば、数値が 123 の場合、1+2+3=6 になります)。後半では、ファイル内の 1 からその番号までのすべての数字を調べ、同じ答えを返す異なる数字がいくつあるかを数えます。数が 123 の場合、合計は 6 で、コードが書き込む答えは 9 です (6、15、24、33、42、51、60、105、114 も同じ答えになるため)。コードは機能しますが、私の問題は、ファイルからの番号がたとえば 2 222 222 222 の場合、答えを得るのにほぼ 30 分かかることです。これをより速く実行するにはどうすればよいですか?