在int型范围内,打印
(1)求N!
(2)求N!-M!
(3) 求N!+M!
package demo05;
import
java.util.ArrayList;
import
java.util.Scanner;
public
class
JieCheng {
public
static
void
main(String[] args) {
while
(
true
){
boolean
bl =
false
;
//判断change方法中是否执行打印操作
System.
out
.println(
"请选择你要的操作:"
);
System.
out
.println(
"1、计算N的阶乘"
);
System.
out
.println(
"2、计算N!+M!的和"
);
System.
out
.println(
"3、计算N!-M!的差(M>N)"
);
System.
out
.println(
"4、退出"
);
Scanner input =
new
Scanner(System.
in
);
int
c = input.nextInt();
switch
(c){
case
1 :
System.
out
.println(
"请输入N的值:"
);
Scanner num =
new
Scanner(System.
in
);
int
number = num.nextInt();
bl=
true
;
change
(number,bl);
break
;
case
2 :
System.
out
.println(
"请输入N和M的值:(N<M)"
);
Scanner num1 =
new
Scanner(System.
in
);
int
n = num1.nextInt();
int
m = num1.nextInt();
sum
(
change
(n,bl),
change
(m,bl));
break
;
case
3 :
System.
out
.println(
"请输入N和M的值:(N<M)"
);
Scanner x =
new
Scanner(System.
in
);
int
y = x.nextInt();
int
z = x.nextInt();
minus
(
change
(y,bl),
change
(z,bl));
break
;
case
4 :
System.
out
.println();
System.
out
.println();
System.
out
.println();
System.
out
.println(
"good-bye!"
);
return
;
}
}
}
/**
* 计算输入数字的阶乘,并转存在数组中
*/
public
static
ArrayList<Integer>
change
(
int
num,
boolean
bl){
ArrayList<Integer> list =
new
ArrayList<Integer>();
list.add(1);
for
(
int
i=2;i<=num;i++){
int
c = 0;
for
(
int
j = 0;j<list.size();j++){
int
p = list.get(j)*i+c;
list.set(j, p%10);
c=p/10;
}
while
(c>0){
list.add(c%10);
c=c/10;
}
}
if
(bl==
true
){
for
(
int
j = list.size();j>0;j--){
System.
out
.print(list.get(j-1));
}
System.
out
.println();
bl=
false
;
}
return
list;
}
public
static
void
sum(ArrayList<Integer> n ,ArrayList<Integer> m){
ArrayList<Integer> s =
new
ArrayList<Integer>();
int
c = 0;
//存在进位值
int
i= 0;
//存储的是所用元素的角标
for
(i = 0;i<n.size();i++){
int
temp = n.get(i)+m.get(i)+c;
s.add(i, temp%10);
c=temp/10;
}
while
(i<=m.size()-1)
{
int
temp=m.get(i)+c;
s.add(i,temp%10);
c/=10;
i++;
}
for
(
int
j = s.size();j>0;j--){
System.
out
.print(s.get(j-1));
}
System.
out
.println();
}
/**
* 拿大数减小数,结果加负号
*/
public
static
void
minus(ArrayList<Integer> n ,ArrayList<Integer> m){
ArrayList<Integer> min =
new
ArrayList<Integer>();
int
c = 0 ;
//借位值
int
i = 0;
for
(i = 0;i<n.size();i++){
int
temp = m.get(i)-n.get(i)+c;
if
(temp>=0){
min.add(i, temp);
c=temp/10;
}
else
if
(temp<0){
min.add(i,temp+10);
c=-1;
}
}
while
(i<m.size()){
int
temp = m.get(i)+c;
if
(temp>0){
min.add(i, temp);
i++;
c=0;
}
else
if
(temp==0){
min.add(i, temp);
i++;
c=0;
}
else
if
(temp<0){
min.add(i,9);
c=-1;
i++;
}
}
System.
out
.print(
"-"
);
for
(
int
j = min.size();j>0;j--){
System.
out
.print(min.get(j-1));
}
System.
out
.println();
}
}