用c++求n的阶乘
6个回答
展开全部
package test;
public class TempTest {
/**
* 我用的是java 机子上没有c++的环境
* 你可以做一些修改,直接把函数里面的代码贴到你自己建立的空函数里面就可以了。
* 把System.out.println(answer);改成"cout<<answer<<'\n'"
* */
public static void main(String[] args) {
//从这行开始复制
int n=100;
//切记要从1开始 answer 的类型用int的时候,n太大的话可能会不够用出现为0的情况
double answer=1;
//第一种 用for循环
for(int i=1;i<=n;i++){
answer*=i;
}
System.out.println(answer);
//第二种do while循环
//像前置的++ -- 后置的++ -- 这一类的东西。搞不懂就直接用+1 -1 加个括号什么的。
answer=1;
do{
answer*=n;
}
while((--n)>0);
System.out.println(answer);
}
//到这行为止都贴进去
}
public class TempTest {
/**
* 我用的是java 机子上没有c++的环境
* 你可以做一些修改,直接把函数里面的代码贴到你自己建立的空函数里面就可以了。
* 把System.out.println(answer);改成"cout<<answer<<'\n'"
* */
public static void main(String[] args) {
//从这行开始复制
int n=100;
//切记要从1开始 answer 的类型用int的时候,n太大的话可能会不够用出现为0的情况
double answer=1;
//第一种 用for循环
for(int i=1;i<=n;i++){
answer*=i;
}
System.out.println(answer);
//第二种do while循环
//像前置的++ -- 后置的++ -- 这一类的东西。搞不懂就直接用+1 -1 加个括号什么的。
answer=1;
do{
answer*=n;
}
while((--n)>0);
System.out.println(answer);
}
//到这行为止都贴进去
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int factorial(int n)
{
int a[1000]; //确保保存最终运算结果的数组足够大
int carry;//进位
int digit = 1;//位数
a[0] = 1;//将结果先初始化为1
int temp;//阶乘的任一元素与临时结果的某位的乘积结果
int i,j;
for(i = 2; i <= n; ++i)//开始阶乘,阶乘元素从2开始依次“登场”
{//按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘
for(j = 1, carry = 0; j <= digit; ++j)
{
temp = a[j-1] * i + carry;//相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)
a[j-1] = temp % 10;//更新临时结果的位上信息
carry = temp / 10; //看是否有进位
}
while(carry)//如果有进位
{
a[++digit-1] = carry % 10;//新加一位,添加信息。位数增1
carry /= 10;//看还能不能进位
}
}
printf("结果是:\n%d ! = ",n);//显示结果
for(i = digit; i >=1; --i)
{
printf("%d",a[i-1]);
}
return 0;
}
{
int a[1000]; //确保保存最终运算结果的数组足够大
int carry;//进位
int digit = 1;//位数
a[0] = 1;//将结果先初始化为1
int temp;//阶乘的任一元素与临时结果的某位的乘积结果
int i,j;
for(i = 2; i <= n; ++i)//开始阶乘,阶乘元素从2开始依次“登场”
{//按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘
for(j = 1, carry = 0; j <= digit; ++j)
{
temp = a[j-1] * i + carry;//相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)
a[j-1] = temp % 10;//更新临时结果的位上信息
carry = temp / 10; //看是否有进位
}
while(carry)//如果有进位
{
a[++digit-1] = carry % 10;//新加一位,添加信息。位数增1
carry /= 10;//看还能不能进位
}
}
printf("结果是:\n%d ! = ",n);//显示结果
for(i = digit; i >=1; --i)
{
printf("%d",a[i-1]);
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>
using namespace std;
#define N 1000
int main()
{ int n, m,i,j,c,t;
int *a;
a=new int[N];
cin>>n;
a[0]=1;
m=1;
for(i=2;i<=n;i++)
{ for(c=0,j=0; j<m;j++)
{ t=a[j]*i+c;
a[j]=t%10;
c=t/10;}
while(c)
{ a[m++]=c%10;
c=c/10;}
}
cout<<"n!=";
for(j=m-1;j>=0;j--)
cout<<a[j];
cout<<endl;
return 0;
}
using namespace std;
#define N 1000
int main()
{ int n, m,i,j,c,t;
int *a;
a=new int[N];
cin>>n;
a[0]=1;
m=1;
for(i=2;i<=n;i++)
{ for(c=0,j=0; j<m;j++)
{ t=a[j]*i+c;
a[j]=t%10;
c=t/10;}
while(c)
{ a[m++]=c%10;
c=c/10;}
}
cout<<"n!=";
for(j=m-1;j>=0;j--)
cout<<a[j];
cout<<endl;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
高精度运算吧,不然有可能溢出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询