我以为我解决了这个问题,但程序输出“0”。我没有看到任何问题。谢谢你的帮助。
问题:
N!表示n×(n-1)×...×3×2×1
例如,10! = 10×9×...×3×2×1 = 3628800,和的总和 数字10中的数字!是3 + 6 + 2 + 8 + 8 + 0 + 0 = 27。
找到数字100中的数字之和!
package projecteuler;
public class problem20 {
public static void main(String[] args)
{
int sayi=0;
int carpim=1;
for(int i=100;i>=1;i--)
{
carpim*=i;
}
String carp=""+carpim;
int[] dizi = new int[carp.length()];
String[] dizis=new String[carp.length()];
for(int i=0;i<carp.length();i++)
{
dizis[i]=carp.substring(i);
}
for(int i=0;i<carp.length();i++)
{
dizi[i]=Integer.parseInt(dizis[i]);
sayi+=dizi[i];
}
System.out.println(sayi);
}
}
答案 0 :(得分:4)
100!
为93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
,超出int
的有效范围(相当多)。尝试使用BigInteger
。为了帮助您入门,
BigInteger carpim = BigInteger.ONE;
for (int i = 100; i >= 1; i--) {
carpim = carpim.multiply(BigInteger.valueOf(i));
}
System.out.println(carpim);
其输出是前面提到的数字。
答案 1 :(得分:0)
看起来这个数字正在溢出。 https://ideone.com/UkXQ4e
4611686018427387904
-4611686018427387904
-9223372036854775808
-9223372036854775808
0
0
0
您可能希望为BigInteger
等因子尝试不同的类答案 2 :(得分:0)
在大学里,我找到了这个例子来寻找n!使用此算法。这是基于n的事实! = n *(n-1)! (例如,5!= 4 * 3!)。使用递归算法:
function factorial(n)
if (n = 0) return 1
while (n != 0)
return n * [factorial(n-1)]
一旦你有100个!,就可以很容易地将其解析为String
并使Integer
从中获取总和
int sum = 0;
for (Character c : yourBigInteger.toString().toCharArray()) {
sum = sum + Integer.parseInt(c.toString());
}
System.out.println(sum);
答案 3 :(得分:0)
public static void descomposicionFactorial(int num){
BigInteger factorial = BigInteger.ONE;
for (int i = num; i > 0; i--) {
factorial = factorial.multiply(BigInteger.valueOf(i));
}
String aux =factorial.toString();
char cantidad[] = aux.toCharArray();
int suma = 0, numero = 0;
for (int i = 0; i <cantidad.length; i++) {
numero = cantidad[i] - '0';
suma += numero;
}
System.out.println(suma);
}