Java:如何对 10^19 < n <=10^20 的大数 n 的数字求和?
Java: How can I Sum Digits of a huge number n that is 10^19 < n <=10^20?
您好,我在运算大量数字时遇到了问题,制作了一个程序,该程序旨在对最大为 10^20 的数字中的数字求和。但是使用双打时它会在 10^19 左右中断。
我应该使用哪种类型?我已经尝试过 Double 和 Long,但是对于大量的数字我得到了错误的答案。
import java.util.Scanner;
public class SumDigit{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
int cases = sc.nextInt();
for(int i=0; i<cases; i++){
double number = sc.nextDouble();
System.out.println(sum(number,0));
}
}
public static int sum(double number, int total){
double digit;
if(number < 10){
total += number;
int totalT = (int) total;
return totalT;
}
else{
digit=(number%10);
total += digit;
return sum(number/10, total);
}
}
}
这个问题解决了你的问题:
How to handle very large numbers in Java without using java.math.BigInteger
你也可以使用 BigInteger
使用包含您的号码的字符串可能最简单:
int sumOfDigits(String str) {
int sum = 0;
for (char c : str.toCharArray()) {
sum += Character.digit(c, 10);
}
return sum;
}
(我猜你还想验证你的字符串只包含数字)
您好,我在运算大量数字时遇到了问题,制作了一个程序,该程序旨在对最大为 10^20 的数字中的数字求和。但是使用双打时它会在 10^19 左右中断。
我应该使用哪种类型?我已经尝试过 Double 和 Long,但是对于大量的数字我得到了错误的答案。
import java.util.Scanner;
public class SumDigit{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
int cases = sc.nextInt();
for(int i=0; i<cases; i++){
double number = sc.nextDouble();
System.out.println(sum(number,0));
}
}
public static int sum(double number, int total){
double digit;
if(number < 10){
total += number;
int totalT = (int) total;
return totalT;
}
else{
digit=(number%10);
total += digit;
return sum(number/10, total);
}
}
}
这个问题解决了你的问题: How to handle very large numbers in Java without using java.math.BigInteger
你也可以使用 BigInteger
使用包含您的号码的字符串可能最简单:
int sumOfDigits(String str) {
int sum = 0;
for (char c : str.toCharArray()) {
sum += Character.digit(c, 10);
}
return sum;
}
(我猜你还想验证你的字符串只包含数字)