用Java编写程序,求n!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Java编写程序,求n!相关的知识,希望对你有一定的参考价值。
public class Myjiechengpublic static void main(String[] args)
String s=JOptionPane.showInputDialog("请输入你要求几的阶乘:");
if(s!=null && s.length()>0)
try
int n=Integer.parseInt(s);
int sum=1;
for(int i=1;i<=n;i++)
sum=sum*i;
JOptionPane.showMessageDialog(null, n+"的阶乘是"+sum);
catch(Exception e)
JOptionPane.showMessageDialog(null, "输入的不是数字");
追问
你的更离谱 34的阶乘是0
追答import java.util.Scanner;
public class simple
public static void main(String[] args)
int m;
System.out.println("Please input a number:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
m=fac(n);
System.out.println(n+"!="+m);
static int fac(int n)
int result=1;
if(n<0||n==1) result=1;
else result=n*fac(n-1);
return result;
就是想不到才问的
追答n! = n * (n-1) * (n-2)....* 1
如n = 3 : 3!= 3*2*1
递归有点麻烦了。
public int go(int n)
int back = 0;
for(int k=1; k <=n ++k)
back *= k;
return back;
int n = 100;
int nn = getNn(n);
System.out.println("n! = " + nn);
/**
* 递归调用求阶乘
*/
public static int getNn(int n)
if(n == 1) return 1;
return n * getNn(n-1);
追问
递归没学过
追答就是自己调用自己,你看看方法很简单,递归最后肯定得有跳出,不然会一直递归下去,
if(n == 1) return 1; 就是当n为1时跳出递归
用Java编写程序,当n=4时,输入如下形式的方针: 1 2 3 6 7 2 3 5 8 13 3 4 9 12 14 4 10 11 15 16 你知道怎么做么
追答1 2 3 6 7 2 3 5 8 13 3 4 9 12 14 4 10 11 15 16 这串数字是实现什么功能!?
追问1355384525
追答1355384525 你的秋秋?
参考技术C 代码如下:public static void main(String[] args)try
Scanner input = new Scanner(System.in);
System.out.println("请输入您要求的阶层数:");
int num = (int)input.nextInt();
int result = 0;
for (int i = 0; i < num; i++)
result += num*--num;
System.out.println("您输入的数的阶层为:"+result);
catch (Exception e)
System.err.println("请输入有效数字!");
我这里是用for循环实现的,也可以使用递归,但怕你理解不了,就没有用.感觉你是有一点java基础的,所以有+=和--符号,希望你能理解,如果不理解可以继续探讨.追问
int num = (int)input.nextInt(); 这句什么意思啊
追答我也是刚看到有人给你写了递归,呵呵.递归有的时候还是很好用的.
追问input.nextInt(); 这个不懂 而且你的程序有错 结果不对 比如输3 就是8 输5 就是38
参考技术D import java.math.BigInteger;import java.util.Scanner;
import sun.security.util.BigInt;
public class Big
/**
* @param args
*/
public static void main(String[] args)
// TODO Auto-generated method stub
Scanner n = new Scanner(System.in);
System.out.println("请输入需要求的数:");
int i = Integer.parseInt(n.next());
int leng = 0;
BigInteger sum = new BigInteger("1");
for(int j = 1; j<i+1;j++)
BigInteger m = new BigInteger(String.valueOf(j));
sum = sum.multiply(m);
System.out.println(sum);
System.out.println(sum.toString().length());
第5个回答 2011-09-29 public class Test
public static void main(String[] args)
double a = 1;
int b = 2;
for(int i=0; i<10; i++)
a *= b;
b++;
System.out.println(i+2+"的阶乘为"+a);
用C语言编写一个计算器程序,实现加,减,乘,除,求平方根(正数),倒数等功能.
①要求根据用户从键盘输入的表达式:
操作数1 运算符op 操作数2
计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)等。
②要求程序能进行浮点数的算术运算。
③如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空白符,那么程序如何修改?
④程序要求可以连续做多次算术运算,每次运算结束后,程序都给出提示:
Do you want to continue(Y/N or y/n)?
用户输入Y或y时,程序继续进行其他算术运算;否则程序退出运行状态。
#include<cmath>
#include<string>
using namespace std;
const double pi = 3.14159265; const double e = 2.718281828459; const int SIZE = 1000;
typedef struct node//为了处理符号而建立的链表(如: 1+(-2)) char data; node *next; node;
typedef struct stack_num//存储 数 的栈 double *top; double *base; stack_num;
typedef struct stack_char//存储 运算符号 的栈 char *top; char *base; stack_char;
stack_num S_num;//定义 stack_char S_char;//定义
char fu[18] = '\n', ')', '+', '-', '*', '/', '%', '^', 'Q', 'L', 'C', 'S', 'T', 'c', 's', 't', '(';
int compare[1000];//表现出各运算符号的优先级 double shu[1000];//存储 "数" 的数组
double dai_result;//运算的结果,是为了处理 M 运算(简介函数里有M的定义) int biao = 0;//和dia_result 一样,为了处理 M 运算 char line[SIZE];//输入的所要计算的表达式
void init()//初始化 compare[fu[0]] = -2;//用数字的大小表现出符号的优先级
compare[fu[1]] = -1; compare[fu[2]] = 2; compare[fu[3]] = 2; compare[fu[4]] = 4; compare[fu[5]] = 4; compare[fu[6]] = 4; compare[fu[7]] = 5; for(int i = 8; i <= 15; i++) compare[fu[i]] = 6; compare[fu[16]] = 7; S_num.base = (double*)malloc(sizeof(double)*SIZE);//为栈开辟空间 S_char.base = (char*)malloc(sizeof(char)*SIZE);//同上 S_num.top = S_num.base; S_char.top = S_char.base;
void push_num(double n)//数字进栈 * ++S_num.top = n;
void push_char(char c)//运算符号进栈 * ++S_char.top = c;
double pop_num()//数字出栈 double m = *S_num.top; S_num.top--; return m;
char pop_char()//运算符号出栈 char cc = *S_char.top; S_char.top--; return cc;
char get_top_char()//得到运算符号的栈中最顶端的运算符号 return *S_char.top;
double operate(double y, char c, double x)//
对两个数计算
(
含是双目运算符
:
如
*, /
等等
)
double r;
if(c == '-')
r = x - y;
else if(c == '+')
r = x + y;
else if(c == '/' && y != 0)
r = x / y;
else if(c == '*')
r = x * y;
else if(c == '^')
r = 1;
for(int i = 1; i <= y; i++)
r *= x;
else if(c == '%')
int r0 = (int)x % (int)y;
r = double(r0);
return r;
double operate_one(double one, char cc)//
对一个数运算
(
含单目运算符
:
如
log(L), sin(S)
等等
)
double r;
if(cc == 'Q')
r = sqrt(one);
else if(cc == 'C')
r = cos(one);
else if(cc == 'S')
r = sin(one);
else if(cc == 'T')
r = tan(one);
else if(cc == 'c')
i++;
i++;
if(ge >= 3)
return 0;
else
return 1;
void output(double result)//
打出结果
printf("
所得结果是
: ");
cout<<result<<endl;
void check()//
检查表达式是否合法
void introduce();
char cc;//
决定计算器按哪种功能进行计算
double result;//
结果
void input();//
定义
if( check_kuohao() && check_char() )//
看是否合法
,
合法则计算
result = compute();
output(result);
cout<<"
输入一个字符
'M'
或
'D'
或
'F',
决定是否继续
: "<<endl;
while(cin>>cc)
if(cc == 'M')
system("cls");
introduce();
printf("
您上次所得结果为
: ");
cout<<result<<endl;
cout<<"
在上次计算结果的基础上
,
请继续输入想计算的表达式
"<<endl;
dai_result = result;
biao = 1;
input();//
输入表达式
break;
else if(cc == 'D')
system("cls");
introduce();
cout<<"
计算器已清零
,
请输入您所要计算的表达式
"<<endl;
input();//
输入表达式
break;
else if(cc == 'F')
system("cls");
cout<<"
计算器关闭
,
谢谢使用
!"<<endl;
break;
else
cout<<"
所输入字符无效
,
请输入一个字符
'M'
或
'D'
或
'F'!"<<endl;
continue;
else//
不合法,分两种不合法
if(check_kuohao() == 0 && check_char() == 1)
cout<<"
您所输入的表达式括号不匹配
,
请重新输入
:"<<endl;
input();//
输入表达式
else
cout<<"
您所输入的表达式不合法
,
请重新输入
:"<<endl;
input();//
输入表达式
void tackle_fuhao()//
处理负号
node *root, *head, *p, *q, *p1;
root = head = new node;
head->next = NULL;
int i;
for(i = 0; line[i] != '\0'; i++)//
建立链表
p = new node;
p->data = line[i];
p->next = head->next;
head->next = p;
head = p;
// delete p;
q = (node*)malloc(sizeof(node));
head = root;
if(root->next->data == '+' || root->next->data == '-')//
处理第一个字符
p = new node;
p->data = '0';
p->next = head->next;
head->next = p;
if(root->next != NULL)
for(q = root->next; q; q = q->next)
if(q->data == '(' && (q->next->data == '-' || q->next->data == '+'))
p = new node;
p->data = '0';
p->next = q->next;
q->next = p;
// delete q;
p1 = new node;
int qi = -1;
for(p1 = root->next; p1; p1 = p1->next)
line[++qi] = p1->data;
line[++qi] = '\0';
void input()//
输入
cin>>line;
if(biao == 0)
tackle_fuhao();//
处理负号
check();//
检查表达式是否合法
void introduce()//
对计算器的符号功能的简要介绍
cout<<"
计算器简要介绍
"<<endl;
cout<<"C(cos)
S(sin)
T(tan)
a(arccos)
c(arcsin) "<<endl;
cout<<"7
8
9
/
on
t(arctan) "<<endl;
cout<<"4
5
6
*
%
L(log)"<<endl;
cout<<"1
2
3
-
M(M+)
Q(sqrt)
"<<endl;
cout<<"0
.
+
^(
乘方
) F(off)
Enter(=) "<<endl;
cout<<"
对于对数输入
L2_5
表示以
2
为底
5
的对数
"<<endl;
cout<<"M(
在前面结果的基础上继续计算,
如:
上次结果为
10
,
现输入
+10.5*2)"<<endl;
cout<<"D(
清零并继续输入
)"<<endl;
cout<<"F(
计算机关闭
)"<<endl;
cout<<"
输入
P
就代表输入圆周率
,
输入
E
代表输入自然对数
"<<endl<<endl;
void print()
system("color 2");
cout<<"
欢迎使用本计算器
"<<endl;
cout<<"
输入一个字符串
on,
计算器开始启动
"<<endl;
void if_start()//
是否启动计算器
string start;
print();
while(cin>>start)
if(start != "on")
cout<<"
您所输入的字符无效
,
请按照介绍的继续输入
:"<<endl;
continue;
else
break;
if(start == "on")
system("color 5");//
颜色的处理
system("cls");//
刷屏
introduce();//
对计算器的简要介绍
cout<<"
现在
,
请输入您所要计算的表达式
"<<endl;
input();//
输入所要计算的表达式
int main()
if_start();//
调用是否启动计算器函数
return 0;
r = acos(one);
else if(cc == 's')
r = asin(one);
else if(cc == 't')
r = atan(one);追问
没看懂 写简单点 按我上面要求弄下 大神 财富值不够在加
参考技术A 把什么等掉了?追问自己看要求
以上是关于用Java编写程序,求n!的主要内容,如果未能解决你的问题,请参考以下文章
一个年级有m个班,每个班有n个学生,编写java程序用二维数组保存学生成绩,计算学生平均成绩
用C语言编写一个计算器程序,实现加,减,乘,除,求平方根(正数),倒数等功能.
ZZNUOJ_用Java编写程序实现1599:真值(附源码)