我从亨利那里找到了答案
int sum = n % 9;
if (sum == 0) sum = 9;
Run Code Online (Sandbox Code Playgroud)
这里
java程序,将数字的数字相加直到它是单个数字 例如:2748303 = 2+7+4+8+3+0+3 = 27 = 2+7 = 9
任何人都可以解释添加数字和余数之间的关系吗?
我的逻辑也如下所示,上面的链接中也提到了
int sum = 0;
while (n > 9 ) {
sum=0;
while (n > 0) {
int rem;
rem = n % 10;
sum = sum + rem;
n = n / 10;
}
n = sum;
}
Run Code Online (Sandbox Code Playgroud)
但是 2 行答案很棒。
要检查一个数是否为素数,最简单的方法是尝试将数除以 2 到 n,如果任何运算得到余数为 0,则我们说给定的数不是素数。但是最好只在 n/2 之前进行划分和检查(我知道更好的方法是直到 sqrt(n) ),我想知道跳过后半部分的原因。
假设我们是否需要检查数字 11 是否为质数,11/2 = 5。如果我们在这两种情况下都执行 11/6 或 11/7 或 11/8 或 11/9 或 11/10,我们得到的余数为0. 对于任何给定的数字 n 也是如此。
这就是避免下半场的原因吗?“如果你将给定的数字除以任何大于给定数字一半的数字,余数永远不会为 0 或者换句话说,任何大于给定数字一半的数字都不能整除给定数字”
请帮助我知道是否正确
我有一些使用Arrays.stream(int arr [])。sum()添加的整数。它以int返回截断后的总和,而实际总和更大且适合long。为什么流API会通过截断而只返回int而不返回长整数?
尝试使用小整数,例如int myArray [] = {1,5,8}; int sum = Arrays.stream(myArray).sum();
工作正常。
但不适用于其和导致long的更长整数。
下面的情况1可以正常工作并返回14
int myArray[] = { 1, 5, 8 };
int sum = Arrays.stream(myArray).sum();
Run Code Online (Sandbox Code Playgroud)
而方案2无法使用,因为总和超过32位。它给出的总和为-105032716,而预期值为4189934580
int myArray[] = { 2094967290, 2094967290};
int sum = Arrays.stream(myArray).sum();
Run Code Online (Sandbox Code Playgroud)
并获得正确的总和,如果我在下面进行操作,则会得到预期的结果4189934580
long sum = 0L + 2094967290+2094967290;
System.out.println(sum);
Run Code Online (Sandbox Code Playgroud)