Java 8种数据类型分别是:1、整型的byte、short、int、long;2、字符型的char;3、浮点型的float、double;4、布尔型的boolean(仅有两个值true, false,变量初始化默认值false)。
long a = 100000L;float f1 = 1.1f;double d1 = 1.2;
注. 声明long类型数据的时候,后面需要加L或者l(一般加大写L);
浮点型(2个):float(单精度型/浮点型)、double(双精度型)
注. 声明float类型的数据的时候加f或者F; double类型的数据的有效位数 15~16;float类型的数据有效位数是 6~7;
引用数据类型
引用数据类型非常多,大致包括:
类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例如,String类型就是引用类型。
简单来说,所有的非基本数据类型都是引用数据类型。
Java求阶乘的计算方法
(输入一个正整数n,输出n!的值,n可能很大,n<=1000)
要是20以内数字阶乘使用for循环的阶乘(也可以用递归)使用for循环的基本阶乘算法:
import java.util.Scanner;
public class Main{
//IDEA中public static void main(String[] args)的快捷键是:psvm
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int r = 1;//0的阶乘是1,如果是求阶乘和的运算初始值是0
for (int i = 1; i <= n; i++) {//这里的for循环也是同理,要从1开始
r = r*i;
}
//sout+回车键
System.out.println(r);
}
}
最多20的数字。但是如果尝试大于20的值,将失败,因为结果太大而无法放入long中,而导致溢出。
再看可以使用递归的阶乘(当然也不能大于20)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(factorialUsingRecursion(n));
}
public static long factorialUsingRecursion(int n) {
if (n <= 2) {
return n;
}
return n * factorialUsingRecursion(n - 1);
}
}
public class Main{
public static void main(String[] args){
int N = 5;
for(int n = 0; n <= N; n++){
int fact = factorial(n);
System.out.println(n + " 的阶乘值是: " + fact);
}
}
public static int factorial(int n){
if(n < 1)
return 1;
return factorial(n-1) * n;
}
}
若控制台输出结果中文乱码时,改成UTF-8,重启项目: File->Invalidate Cashes/Restart...
BigInteger,long数据类型只能用于n <= 20的阶乘。对于较大n值,我们可以使用java.math包中BigInteger类 ,它可以容纳高达2^Integer.MAX_VALUE的值:
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
BigInteger r = new BigInteger("1");//传一个字符串1
for (int i = 1; i <= n; i++) {
//int、long转换为BigInteger:
//new BigInteger(int i+""); / new BigInteger(long l+"");
//先将int、long转换为String类型、再使用BigInteger的构造方法创建BigInteger类型的数据
BigInteger temp = new BigInteger(""+i);//将这个i变成BigInteger类型
r = r.multiply(temp);//.multiply(BigInteger val)用于计算两个BigInteger的乘法
}
System.out.println(r);
}
}
Java求阶乘和的计算方法
(输入一个整数X,求满足1!+2!+3!+......+n! = X的最大整数n,例如输入5就会得到n为2)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int sum = 0;//保存阶乘和
int fac = 1;//保存当前阶乘,不能是0
int i = 1;
while(true){
fac *= i;
sum += fac;//计算1到i的阶乘
if (sum >x) break;
i++;
}
System.out.println(i-1);
}
}
(在屏幕上输出阶乘1!+2!+3!+......+n! 的和假定n为10)
/**
* 阶乘求和,步骤:先求一个数的阶乘,再把1到10的每一个数的阶乘求和
*/
public class Main {
public static void main(String[] args) {
int total = 0;
for (int i = 1; i <=10; i++) {
total += fn(i);
}
System.out.println(total);
}
//给定一个数,求这个数的阶乘
public static int fn(int num){
int result = 1;
for (int i = num; i >0 ; i--) {
result *= i;
}
return result;
}
}
/**
* 阶乘求和,步骤:先求一个数的阶乘,再把1到10的每一个数的阶乘求和
*/
public class Main {
public static void main(String[] args) {
int total = 0;
for (int i = 1; i <=10; i++) {
total += fn(i);
}
System.out.println(total);
}
//给定一个数,求这个数的阶乘
public static int fn(int num){
int result = 1;
if (num >1) {//递归方法
result = num * fn(num-1);
}
return result;
}
}