我正在尝试用阶乘计算尾随零的数量。
例如
4!= 24 所以你检索到 0。
9!= 362880 所以你检索 1。
10!= 9!x 10 = 3628800 所以你检索 2。
11!= 10!x 11 = 3.99168E7 所以你检索 2。
static double factorial(double n) {
double f = 1;
for(int i = 1 ; i <= n ; i++) {
f *= i;
}
return f;
}
static int numberOfZeros(double f) {
int ten = 1;
int count = 0;
for(;f%Math.pow(10, ten) == 0;count++) {
ten++;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
这个代码是好的,直到数字 n 是 22。但是当我尝试将 23 放入然后计数是 …
我已经学会了如何创建自己的Comparator,例如,创建一个简单的比较基于absolute value
class absComparator implements Comparator<Integer> {
public int compare(Integer a, Integer b) {
return a * a - b * b;
}
}
Run Code Online (Sandbox Code Playgroud)
当然,这可以用于自定义排序:
List<Integer> list_1 = new ArrayList<>(Arrays.asList(-3, -2, -1, 0, 1, 2));
list_1.sort(new absComparator());
>>> [0, -1, 1, -2, 2, -3]
Run Code Online (Sandbox Code Playgroud)
所以这一切都很好,但是如果我只想比较基于这个比较器的两个整数来给出一个布尔值怎么办?
// Currently:
System.out.println(-2>1);
>>> false
Run Code Online (Sandbox Code Playgroud)
那么我如何true通过比较-2和1使用来获得 a absComparator?
为什么这个java代码
long a4 = 1L;
long a3 = 1;
long a2 = 100L * 1024 * 1024 * 1024;
long a1 = 100 * 1024 * 1024 * 1024;
System.out.println(a4);
System.out.println(a3);
System.out.println(a2);
System.out.println(a1);
Run Code Online (Sandbox Code Playgroud)
运行时,输出
1
1
107374182400
0
Run Code Online (Sandbox Code Playgroud)
而不是预期的
1
1
107374182400
107374182400
Run Code Online (Sandbox Code Playgroud)
输出?
我正在编写一个java程序来输出2的指数幂(顺便说一下,我不能使用Math.pow()),但是在2 ^ 31和2 ^ 32我得到了别的东西.另外,我不打算接受负整数.
我的代码:
class PrintPowersOf2 {
public static void main (String[] args) {
printPowersOf2(10);
printPowersOf2(5);
printPowersOf2(2);
printPowersOf2(-5);
printPowersOf2(30);
printPowersOf2(32);
}
public static void printPowersOf2 (int x) {
for(int i=0;i<x+1;i++) {
int y = exponent (i);
System.out.print(y);
if(!(i == x)) {
System.out.print(" ");
}
}
System.out.println();
}
static int exponent(int power) {
int output = 1;
for (int z=0; z<power; z++)
output *= 2;
return output;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
1 2 4 8 16 32 64 …Run Code Online (Sandbox Code Playgroud) 当我分配大于字节的值时会发生什么?
根据oracle的官方文档,Byte是
字节:字节数据类型是8位带符号的二进制补码整数。最小值为-128,最大值为127(含)。字节数据类型对于在大数组中节省内存非常有用,因为内存节省实际上很重要。在限制可以帮助您澄清代码的地方,也可以使用它们来代替int。变量范围有限的事实可以作为文档的一种形式
我的代码是
public class B
{
public static void main(String args[])
{
byte b;
b=(byte)129;
System.out.println("b="+b);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
b=-127
Run Code Online (Sandbox Code Playgroud)
当我分配大于字节的值时会发生什么。Java编译器将报告错误。如果我将此值转换为字节,我会去的
byte b = (byte) 128;
Run Code Online (Sandbox Code Playgroud)
我不明白该程序的输出?
可能重复:
Java如何处理整数下溢和溢出以及如何检查它?
System.out.println(4*2147483647)在java中如何等于-4?
我想知道为什么这样做:
2 * Integer.MAX_VALUE == -2
Run Code Online (Sandbox Code Playgroud)
我很期待你的回复.
我真的对此感到困惑.我正在划分两个正数并得到一个负面结果(我正在使用Java).
long hour = 92233720368L / (3600 * 1000000 );
Run Code Online (Sandbox Code Playgroud)
我得到结果-132.
但如果我将它们分成两个长数字,我得到了正确的结果:
long hour1 = 92233720368L / (3600000000L );
Run Code Online (Sandbox Code Playgroud)
然后我得到结果:25
我想知道它为什么会发生......
先感谢您!:)
我必须创建一个从1到100的程序,并计算从分区中得到的数字的单独产品,其余为0,1,2,3,所以基本上我必须计算4种不同的产品.
我尝试用两种方式解决这个问题,两种方式都显示错误的结果:
第一次尝试:
public class prodmod4 {
public static void main(String[] args){
int i, k=0;
long P=1;
while(k<4){
for(i=1;i<=100;i++){
if(i%4==k){
P=P*i;
}
}
System.out.printf("Produsul numerelor care au restul %d este: %d\n", k, P);
i=1;
P=1;
k++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序时,它给了我:
休息0的数字的乘积是0,休息1 -6661643765781265135,休息2 -2885954222765899776,休息3 -9150527387120197261
第二次尝试:
public class prodmod4v2 {
public static void main(String[] args){
int i;
long zero=1, unu=1, doi=1, trei=1;
for(i=1;i<=100;i++){
switch(i%4){
case 0:
zero=zero*i;
break;
case 1:
unu=unu*i;
break;
case 2:
doi=doi*i;
break;
case 3:
trei=trei*i;
break;
default: …Run Code Online (Sandbox Code Playgroud) Java使用32位作为字符提示-因此最大值为65536。
但是以下代码为我提供了标题中报告的结果。
public static void main(String[] args) {
int a = 10000000;
char b = 33;
b = (char)a;
System.out.println((int)b);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试解决这个涉及基本数学的特定问题。我的算法适用于所有其他测试用例,因此我知道它是正确的。但是对于其中一个测试用例中的一个特定输入,结果是错误的。我通过打印它们来检查值,值是:
a = 1000000000 and b = 999999999
Run Code Online (Sandbox Code Playgroud)
当我做
System.out.print(a*b);
Run Code Online (Sandbox Code Playgroud)
它返回 1808348672。
我试过这样做:
long ans = (long)a*b;
System.out.print(ans);
Run Code Online (Sandbox Code Playgroud)
它仍然返回 1808348672