java - 算法不适用于某些输入
问题描述
我是编程新手,我在一个网站上看到一个问题来练习。我被要求创建一个采用正整数的算法,比如说n。如果n为偶数,则算法将n除以 2。如果n为奇数,则将n乘以3 并加 1。重复此操作直到得到n = 1。例如, n =3,输出将为 3 > 10 > 5 > 16 > 8 > 4 > 2 > 1 我的代码如下所示:
import java.util.*;
public class practice {
public static void solve(int n){
while(n > 1){
System.out.print(n + " ");
if(n % 2 == 0){
n=n/2;
}else{
n=(3*n)+1;
}
}
System.out.print(n);
}
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
int input = keyboard.nextInt();
solve(input);
}
}
(编辑:最后一个输出假设为 1,但我在下一个输入中得到随机负数):138367 270271 665215 704511 我不知道我做错了什么......
解决方案
我认为int
在一些计算后尝试使用给定的代码long
:
import java.util.*;
public class practice {
public static void solve(long n){
while(n > 1){
System.out.print(n + " ");
if(n % 2 == 0){
n=n/2;
}else{
n=(3*n)+1;
}
}
System.out.print(n);
}
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
long input = keyboard.nextLong();
solve(input);
}
}
推荐阅读
- sql-server - 设置多服务器管理---SQL Server 账户
- unit-testing - 如何测试从目录中读取的骆驼路线?
- android - 如何在 Kotlin 中创建类似于在 Java 中完成的权限数组?
- google-sheets - 在 gsheets 中,如何在查询中从工作簿中的多个工作表中提取数据?
- javascript - 如何在 JavaScript 和 HTML 中将数据传递给父级
- office-js - 我可以使用 office.js 中的 bootstraptoken 静默获取 Graph 的 accesstoken 吗?
- java - 使用 android studio put extra 时变量始终为空
- ms-word - 将电子邮件转换为 PDF
- python - Django:找不到页面(404)
- flutter - Dart - 复制像 kotlin 这样的密封类时出现问题