用while循环编写求n!

如题所述

第1个回答  2007-01-02
用C或C++来写,如果直接使用内置类型的话,很容易就会溢出的.

如计算1000!就算是用long double也是溢出.

所以需要自己组织一下数据结构
如下完整程序:

更多的还见我的邮件列表,欢迎讨论:)
http://groups-beta.google.com/group/DataStream/
----------------------------------------------------------
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
int main(int argc,char **argv)
{
vector<long> num;num.push_back(1);
for(int i(2),bit(0); i<=atol(argv[1]); ++i ){
vector<long>::iterator ei(--num.end());

for(bit=0;num.begin()<=ei;--ei)

9999<(*ei=*ei*i+bit)?bit=(*ei)/(10000),(*ei)%=(10000):bit=0;
if(bit)num.insert(num.begin(),bit);
}
vector<long>::iterator bi(num.begin());
cout<<*bi;
for(++bi;bi!=num.end();++bi)

cout<<(*bi/1000)<<(*bi/100>10?*bi/100%10:*bi/100)<<(*bi/10>10?*bi/10%((*bi/100)*10):*bi/10)<<*bi%10;
exit(0);
}
第2个回答  2007-01-02
public class Nmul
{
static int f(int n) //递归方法
{
if ((n==0) || (n==1))
return 1;
else
{
System.out.println(n+"!="+n+"*"+(n-1)+"!");
return n*f(n-1);
}
}
public static void main(String args[])
{
int i=5;
if (args.length>0)
i = Integer.parseInt(args[0]); //将args[0]转化为int值
System.out.println(i+"!="+f(i));
}
}
以上为Java版本本回答被网友采纳
第3个回答  2007-01-03
main()
{ int n,s=1;
scanf("%d",&n);
if(n==0)
printf("%d",s);
else
{while(n>=1)
{s=s*n;
n--;
};
printf("%d\n",s); }
}
第4个回答  2007-01-02
用TC编写的
已经检测过了

main()
{
int i,k=1;
printf("Input an integer\n");
scanf("%d",&i);
while(i>=1)
{
k=k*i;
i--;
}
printf("%d",k);
}

用while循环编程实现输入整数n,输出n!
8 int n=10;\/\/任意输入的值 int i = 1;int sum=i;while(i<=n){ sum *= i;i++;}

用while循环,求n!
while(i<=n)f*=i++;printf("factorial of %d is:%.2f\\n",n,f);system("pause");return 0;}

使用循环结构实现计算N!的算法是
\/\/用迭代的方法计算n的阶乘long factorial(int n){ int result=1; while(n>1) { result*=n; n-=1; } return result;}在这一题上,循环的代码就要写长一点,自己动动手吧,不会吃亏的

.使用while循环实现一个数的阶乘运算:n!
while (n>1){ x = x*n; n=n-1;}; \/\/关键的语句 printf("%.0f\\n",x);return 0;} 例如: n=5 得120

问一道C++题目:用for语句,while语句和递归函数三种方法计算n! 。
求n!for循环int i=1;int n;int result=1;scanf("%d",&n);for(;i<=n;i++){ result*=i;}while循环int result=1;int i=1;scanf("%d",&n);while(i!=n){ rsult*=i;i++ }递归int ff(int n){ if(n==0 )return 1;else if(n==1)return 1;else return n*ff(n-1);}...

编写一个求n!的程序(n取值范围在1-20之间),用do-while循环来实现。
include <stdio.h>int main(){int cnt = 0;int iSum = 1;printf("Enter Num:");scanf("%d", &cnt);if (cnt == 0)iSum = 1;else{int i = 1;do {iSum *= i;i++;}while(i <= cnt);}printf("\\n%d\\n\\n", iSum);return 0;} ...

while(n!
n==1时,死循环n!=1时,跳过循环语句 while是循环流程控制,使用的标准格式为 while(表达式){ 循环语句体;} 说明:①while循环的表达式是循环进行的条件,用作循环条件的表达式中一般至少包括一个能够改变表达式的变量,这个变量称为循环变量 ②当表达式的值为真(非零)时,执行循环体;为假(0)...

分别用for,while,do_while循环语句以及递归方法计算n!,并输出算式(java...
\/\/while循环 public static void whileFunc(int n) { int result = 1;StringBuffer str = new StringBuffer();while (n > 0) { if (n > 1) { str.append(n + "*");} else { str.append(n + "=");} result *= n;n--;} str.append(result);System.out.print(str.toString(...

用三种循环结构编程, 输入n (n<15), 求n!
int main(void) { int n, i;int ans = 1;printf("n = ");scanf("%d", &n);\/\/ for 循环 for (i = 1; i <= n; ++i) { ans *= i;} printf("ans = %d\\n", ans);\/\/ while 循环 i = ans = 1;while (i <= n) { ans *= i;++i;} printf("ans = %d\\n", ...

matlab用while求n!
>> n = 10;r = 1;for k = 1:n r = r*k;end;disp(r);3628800 >> n = 10;r = 1;k = 1;while k <= n r = r*k;k = k+1;end;disp(r);3628800

相似回答