100的阶乘在C语言中怎么编程(要求用while和for两种方法)?
#include#include#include#includeusing namespace std;const int MAXN=510;char re[MAXN];struct Big{int s[MAXN],len;Big():len(1){memset(s,0,sizeof(s));}void read(){scanf("%s",re);int n=strlen(re);len=(n-1)/4+1;int x=len,k=0;while('0'=1;--i){if(i!=len)printf("%04d",s[i]);else printf("%d",s[i]);}}Big& operator +=(Big &a){int n=max(a.len,len);for(int i=1;i=1;--i)if(a.s[i]!=b.s[i])return a.s[i]<b.s[i];return false;}Big operator * (Big &a,Big &b){Big c=a;return c*=b;}Big operator + (Big &a,Big &b){Big c=a;return c+=b;}int main(){Big sum,x,i,dz,lim;dz.s[1]=i.s[1]=x.s[1]=1;lim.s[1]=101;for(;i<lim;i+=dz)sum+=x*=i;//从右往左运算,相当于x=x*i;sum=sum+x;sum.print();}楼上用int的,自然溢出运行出来应该会是负数或者0.....题主以后如果出阶乘题数据要小
运行结果:
// 注释比较多,希望你不要感到厌烦,呵呵。
// 还记得10进制的乘法么?
// 567
// * 5
// -------
// 2835
// 用编程语言表示出来就是
// 当前的int a[4] ={0, 5, 6, 7}
// 然后从最低位开始用5去乘以每一位,少于10的部分就是这
// 个位新的值超过10的部分就是进位,加入他的前一位的结果
// 那么从最低位开始a[0]*5=35,由于没有进位所以a[0]=5, carry
// =3,a[1]*5=30,加上进位3=33,所以a[1] =3, carry=3,以此类推最
// 高位就是a[3] =2;所以我们的到的数组就是a[4] ={2,8,3,5},结果
// 当然就是2835拉。
// 下面我们只是用更大的进制模仿这个过程,XD
#include
#define SIZE 500 // SIZE 500就可以表示结果在500*6=3000位以内的大整数
#define BASE 1000000 // 目前使用进制的基数,6位的底数可以处理1000以内的阶乘
// 超过1000的话会溢出,因为最大的六位数
//乘以4位数可能超过32位整数的范围
// 当处理大一点的阶乘的话就要相应减小这个值
// 所以当你求1千万的阶乘的时候记得base是10,呵呵。
unsigned int a[SIZE];
void jiechen(int n)
{
int i, j;
int carry; //进位
int max =0; //最高位,当前数即表示占了数组的max+1项
a[0] = 1; //最低位初始化成1
for(i=1; i<=n; i++) {
carry =0; //每让这个超大的数乘一个新的数字时,进位初始化成0
for(j=0; j<=max; j++) { // 处理每一位
a[j] = a[j]*i +carry;
carry = a[j] / BASE; //超出10000000作为高位的进位 a[j] = a[j] % BASE; //当前位是当前位乘以*i+低位的进位
}
if(carry != 0) //最高位有进位就调整当前最高位
a[++max] = carry;
}
printf("%d!=", n); //以下是打印过程
printf("%d", a[max]); //最高位我们不打印前面的0,不然看起来不爽XD
for(i=max-1; i>=0; i--) //注意:是从高位开始打印的
printf("%06d", a[i]); //打印6位,注意要包括前面的0,还有修改了BASE的话记得改这里!
printf("
");
}
int main()
{
for(int i=1; i<100; i++) //打印100以内的阶乘来验证我们的成果
jiechen(i);
return 0;
}
#include <stdio.h>
int main()
{
int a=100;
double num=1.0;
//while 循环相乘实现阶乘
while(a>0)
{ num *= a;
a--;
}
printf("100!的结果:%le
",num);
//for循环相乘实现阶乘
num=1;
for(a=1;a<=100;a++)
{ num *= a;}
printf("100!的结果:%le
",num);
return 0;
}
100太大了, 保存不了那么大的数字。 给你看10的阶乘吧,道理是一样的,把10换成100就行了。
用for循环
#include<stdio.h>
int main()
{
int i,sum=1;
for(i=1;i<=10;i++)
{
sum*=i;
printf("%d的阶乘,sum=%d\n",i,sum);
}
return 0;
}
用while循环
#include<stdio.h>
int main()
{
int i=1,sum=1;
while(i<11)
{
sum*=i;
printf("%d的阶乘,sum=%d\n",i,sum);
i++;
}
return 0;
}
100阶乘数值很大,估计很难保存!
求10!原理一样!
for
#include<stdio.h>
int main()
{
int i,sum=1;
for(i=1;i<=10;i++)
{ sum=sum*i; }
printf("sum=%d\n",sum);
}
while
#include<stdio.h>
int main()
{
int i,sum;
i=1;
sum=1;
while(i<=10)
{ sum=sun*i;
i++;}
printf("sum=%d\n",sum);
}
int main()
{
int a=100;
double num=1;
while(a>0)
{ num *= a;
a--;
}
printf("%lf\n",num);
num=1;
for(a=1;a<=100;a++)
{ num *= a;}
printf("%e\n",num);
}
#include<stdio.h>
int main(){
int n=100;
double mul=1;
while(n>1){
mul=n*mul;
n--;
}
printf("%d",mul);
}
#include<stdio.h>
int main(){
int n=100;
double mul=1;
for(int i=1;i<=n;i++){
mul=i*mul;
}
printf("%d",mul);
}
C语言中阶乘怎么输?
1、不是直接输入n!,需要一定的算法才可以实现。具体方法是,首先打开编辑器,准备好空白的C语言文件:2、在编辑器中输入代码,这里所谓 n 的阶乘,就是从 1 开始乘以比前一个数大 1 的数,一直乘到 n。C语言中可利用循环解决,可以假设循环变量为 i,初值为 1,i 从 1 变化到 n;依次让 ...
C语言怎样求1到100的阶乘和
接下来我们编译写好的C语言文件,如下图所示 04 最后执行C语言文件,我们就可以得到1到100的阶乘之和了,如下图所示
C语言中,如何计算阶乘?
下面是测试的结果:测试结果 思路:先通过程序获得阶乘的值,之后再将阶乘相加,求阶乘时和相加时都用递归的写法 首先是求阶乘:int factorial(int index){ int sum = 0;if (index == 1){ sum = 1;}else{ sum = index * factorial(index-1);} return sum;} 之后再求和:int add_recursion...
用c语言如何编程计算阶乘
if(a>=2)if(a!=2) \/\/a大于或等于2即a=3时 b=3; \/\/a大于或等于2,且a不等于2时 else b=2; \/\/a大于或等于2,且a等于2时 else b=1; \/\/a小于2时 a=3时b=3
用c语言求1-30之间的所有整数的阶乘
include<stdio.h> main(){ int i;double n;\/\/因为30!已经超出了int的表示范围,所以用double n=1.0;for(i=1;i<=30;i++){ n*=i;printf("%d!=%.0f\\n",i,n);\/\/输出的时候,n保留0位小数 } }
C语言编程求阶乘1到10 并分别显示在屏幕上。
include<stdio.h>int main(){int i,j;long m;for(i=1;i<=10;i++){m=1;for(j=1;j<=i;j++){m=m*j;}printf(" %d!=%ld\\n",i,m);}return 0;}
C语言阶乘问题,程序每次运行结果都是0,为什么呢
因为你的i从0开始的,任何数乘以0你说得多少。你把i的初值给1试试。include<stdio.h> int main(){ int n,t,i;t=1;scanf("%d",&n);for(i=1;i<=n;i++)t=t*i;printf("%d\\n",t);return 0;}
1到20阶乘的和用c语言表达
include <stdio.h> long jiecheng(int x){ long int i,k=1;for(i=1;i<=x;i++)k=k*i;return k;} int main(){ long int j,k=0;int i;for(i=1;i<=20;i++){ j=jiecheng(i);k+=j;} printf("%ld\\n",k);}
c语言 编程实现求n!要求用定义求阶乘的函数
接着将输入的数传入处理阶乘的函数中完成计算,最后输出打印结果。prime函数有一个参数,首先判断是否为正数,然后用prime函数自身乘以参数s,最后返回值即可完成:3、将程序编译运行,弹出窗口输入任意的数,计算阶乘;这里输入7,得到结果是5040。以上就是C语言求阶乘的方法:...
c语言阶乘怎么表示?
阶乘拓展与再定义 一直以来,由于阶乘定义的不科学,导致以后的阶乘拓展以后存在一些理解上得困扰,和数理逻辑的不顺。阶乘从正整数一直拓展到复数。传统的定义不明朗。所以必须科学再定义它的概念 真正严谨的阶乘定义应该为:对于数n,所有绝对值小于或等于n的同余数之积。称之为n的阶乘,即n!对于复数...
望刷感冒: int fun(int i) {if(i==1)return 1;return i*fun(i-1); }
兴庆区17563235380: 100的阶乘的C语言程序编程 - ?
望刷感冒: // 函数功能,求整数aIndex的阶乘 int function(int aIndex) { int nResult = 0; for (int i = 0; i < aIndex; i++)if (0 == i)nResult *= 1;else nResult *= i;return nResult; } // 求100的阶乘 int nResult = function(100);
兴庆区17563235380: C语言做100的阶乘 - ?
望刷感冒: 可以分段存,比如建一个数组,把结果村到数组里面.
兴庆区17563235380: 用C语言求100的阶乘 - ?
望刷感冒: 1 2 3 4 5 6 7 8 9 10 11 12 13voidmain() {longi,j,x,num=0;for(i=1;i<=100;i++){x=1;for(j=1;j<=i;j++)x*=j;num+=x;}printf("%ld",num);getch(); }
兴庆区17563235380: 用C语言编写一个程序实现100的阶乘(要求采用函数调用方式实现) - ?
望刷感冒: #include long long function(int n) { if (n==1) return 1; return n*function(n-1); } int main() { long long sum=1; int n; scanf("%d",&n); for (int i=2;i<=n;i++) sum*=i; printf("%lld\n",sum); }
兴庆区17563235380: 用C语言怎样编100的阶乘(数据结构) - ?
望刷感冒: 1: #include <stdio.h> void main() {int i;double sum=1;for(i=1;i<=100;i++){sum=sum*i;}printf("%e\n",sum); }2: #include <stdio.h> void main() {int i=1;double sum=1;while(i<=100) { sum=sum*i; i++; }printf("%e\n",sum); } 100的阶乘很大,所以用指数形式输出
兴庆区17563235380: 100的阶乘用c语言怎样表示? - ?
望刷感冒: 定义为long double仍然会溢出,因为在32位系统下long double仍然只有32位,下面即可:#include <stdio.h> int n; int r[600]={0}; int count(n) { int i; for(i=0;i<600;i++) r[i]*=n; for(i=599;i>0;i--) { r[i-1]=r[i-1]+r[i]/10; r[i]=r[i]%10; } }int main() { int i; int ...
兴庆区17563235380: 怎么用C语言编写100以内任意整数的阶乘啊? - ?
望刷感冒: int n; int r[600]={0}; int count(n) { int i; for(i=0;i<600;i++) r[i]*=n; for(i=599;i>0;i--) { r[i-1]=r[i-1]+r[i]/10; r[i]=r[i]%10; } }int main() { int i; int reach=0; r[599]=1; scanf("%d",&n); for(i=1;i<=n;i++) count(i); for(i=0;i<600;i++) {if(r[i]) reach=1; if(r[i]||reach) ...
兴庆区17563235380: 一个c语言程序要求输出100的阶乘的值 - ?
望刷感冒: 100的阶乘太大了,一个int放不下.把s改成double的吧
兴庆区17563235380: 求编写一个求100的阶乘的程序. - ?
望刷感冒: #include<stdio.h> main() {int i,j=0; for(i=1;i<=100;i++) j=i*j ; printf("%ld\n",j); getch(); }100!=9.33262154 * 10157 数值太大...int可能不行.你尝试使用double类型的数据