如何处理 java 上非常大的数字的计算?
How to handle calculations with really big numbers on java?
我正在开发一个从文件中读取一些数字的程序。有了这些数字,然后程序需要使用我稍后提供的公式计算结果数字。
文件格式如下:
3 //number of tests
28347823734 /*argument 1 of test 1*/ 78353845787 /*argument 2 of test 1*/
63747289347 /*argument 1 of test 2*/ 242489983758 /*argument 2 of test 2*/
75472934872 /*argument 1 of test 3*/ 627364829374 /*argument 2 of test 3*/
解析每个测试的每个值后,必须计算得出结果的公式如下:
result = argument1 * 8 * argument2
稍后在程序中,我必须将结果与星期几联系起来。例如,如果结果为 2,则日期为星期三,如果结果为 8,则日期为星期二。
为了处理这个问题,我执行了以下方法。 (结果需要除以8)
String str = calculateDay(result/8);
为了知道星期几,我创建了以下方法:
private String calculateDay (long n) {
String days = new String[]{"MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"};
int d = 0;
for (long i=1; i<=n; i++) {
if (d==6) {
d=0;
continue;
}
d++;
}
return days[d];
}
这里的问题是,对于一个包含 100 个不同测试的文本文件,这将需要很长时间才能完全执行,因为数字真的很大,所以...我该如何处理?
大数:
这些数字看起来应该非常适合 long
值。但是如果long不够大,可以用java.Math.BigInteger
计算天数:
对此的计算只是 numDays % daysOfTheWeek。如果你需要使用BigInteger,它有一个mod(...)
方法
我正在开发一个从文件中读取一些数字的程序。有了这些数字,然后程序需要使用我稍后提供的公式计算结果数字。
文件格式如下:
3 //number of tests
28347823734 /*argument 1 of test 1*/ 78353845787 /*argument 2 of test 1*/
63747289347 /*argument 1 of test 2*/ 242489983758 /*argument 2 of test 2*/
75472934872 /*argument 1 of test 3*/ 627364829374 /*argument 2 of test 3*/
解析每个测试的每个值后,必须计算得出结果的公式如下:
result = argument1 * 8 * argument2
稍后在程序中,我必须将结果与星期几联系起来。例如,如果结果为 2,则日期为星期三,如果结果为 8,则日期为星期二。 为了处理这个问题,我执行了以下方法。 (结果需要除以8)
String str = calculateDay(result/8);
为了知道星期几,我创建了以下方法:
private String calculateDay (long n) {
String days = new String[]{"MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"};
int d = 0;
for (long i=1; i<=n; i++) {
if (d==6) {
d=0;
continue;
}
d++;
}
return days[d];
}
这里的问题是,对于一个包含 100 个不同测试的文本文件,这将需要很长时间才能完全执行,因为数字真的很大,所以...我该如何处理?
大数: 这些数字看起来应该非常适合
long
值。但是如果long不够大,可以用java.Math.BigInteger
计算天数: 对此的计算只是 numDays % daysOfTheWeek。如果你需要使用BigInteger,它有一个
mod(...)
方法