用c语言编写100!(100的阶乘)

作者&投稿:澄超 (若有异议请与网页底部的电邮联系)
用C语言编写一个程序实现100的阶乘(要求采用函数调用方式实现)~

long int nx_1(unsigned int x)
{
auto int i;
auto long int temp;
temp = 1;
for(i=1;i<=x;i++)
temp *= i;
return temp;
}

例如 a=nx_1(100);那么a 就是100阶乘值

#include
main()
{
int i,j,sum=1;
int count=0;
for(i=1;i<=100; i++)
{ sum=1;
for(j=1;j<=i;++j)
{ sum*=j;}
count+=sum;
}

printf("%d",count);


}

// 注释比较多,希望你不要感到厌烦,呵呵。
// 还记得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 <stdio.h>
#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("\n");
}

int main()
{
for(int i=1; i<100; i++) //打印100以内的阶乘来验证我们的成果
jiechen(i);
return 0;
}

把数都用字符串处理,写个大数的数据结构,可以表示任意大的数~

#include<stdio.h>
#define Maxlen 10000
#define N 100 //阶数100
int mult(int num[],int len,int n)
{
int i,rem=0;
for(i=0;i<len;i++)
{
rem+=num[i]*n;
num[i]=rem%10;
rem=rem/10;
}
if(rem>0)
{
num[len]=rem%10;
len++;
rem=rem/10;
}
return len;
}
main()
{
int num[Maxlen];
int len=1,i;
num[0]=1;
for(i=2;i<=N;i++)
len=mult(num,len,i);
for(i=len-1;i>=0;i--)
printf("%d",num[i]);
printf("\n");
}

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

/* 求N!的位数公式 log10(1)+log10(2)+···+log10(n) 取整加1 */
int wei(int n)
{
int i;
double sum=0;
for(i=1;i<=n;i++) sum+=log10((double)i);
/* 以万为进制,一位可以表示4个数,减少存储空间 */
return (int)((sum+1)/4+1);
}

/* 高精度阶乘核心 */
int main()
{
int i,j,n,jinwei,weishu=1,temp;
unsigned int *x;
scanf("%d",&n);
/* 依据阶乘位数申请动态数组 */
x=(unsigned int*) malloc(wei(n)*sizeof(int));
x[0]=1;
for(i=2;i<=n;i++)
{
jinwei=0;
for(j=1;j<=weishu;j++)
{
temp=x[j-1]*i+jinwei;
if (temp>=1)
{
/* 以万为进制,提高运算速度 */
x[j-1]=temp%10000;
jinwei=temp/10000;
}
}
while(jinwei)
{
weishu++;
x[weishu-1]=jinwei%10000;
jinwei/=10000;
}
}
/* 先输出第一个数,防止首位出现0 */
printf("%d",x[weishu-1]);
/* 输出其余的数,因为万进制,需要补0 */
for(j=weishu-2;j>=0;j--) printf("%04d",x[j]);
/* 释放申请的内存 */
free(x);
system("pause");
return 0;
}


c语言1到100累加和
清楚算法就可以很快写出:(1)只需输入2个变量n和sum,且sum=n+sum.(2)确定n的范围为n<=100 (3)循环体为 for(n=1;n<=100;n++)sum+=n;(4)根据C语言编辑规则写出程序 用for循环求:include<stdio.h> int main(void){ int n,sum=0;for(n=1;n<=100;n++)sum+=n;printf("1...

c语言 编写产生100个1到10范围内的随机数的程序,并且以降序排序_百度知 ...
for (int i=0;i<100;i++){ t[i] = (rand()%(10-1+1))+1;\/\/ 然后对t[i]排序算法,冒泡啥的。。baidu去。}

C语言中编程计算1至100以内的奇数和偶数并分别求和,求代码
C语言编程:求1到100奇数和,编程输出求和结果。int i ,sum;sum =0;for (i=1; i<100;i+2)sum = sum +i;printf("%d",sum);C语言中用循环语句分别统计1到100的整数和,奇数和和偶数并输出 include <stdio.h>int main(int argc, char *argv[]){ int i = 0; int sum1 = 0; int...

c语言编写程序:求出1-100之间的完全数.所谓完全数是指这样的数,该数...
include <stdio.h>#define MAX 100 \/*100以内的完全数*\/int main (void) {int x,temp,sum; \/*X表示要判断的数,temp表示数的因子,sum表示因子之和*\/for (x=1; x<=MAX; x++) {sum= 0;for(temp=1; temp<x; temp++) { \/*判断x能否被temp整除,如果可以,则是因子,进行求和*\/if...

C语言求1到100偶数之和怎么编程?
include<stdio.h> main(){ int i,sum=0;for(i=0;i<=100;i=i+2){ sum=sum+i;} printf("%d",sum);} C语言特有特点:C语言是普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,因此相对于其它编程语言,它具有自己独特的特点。具体体现为以下...

C语言编写:求1到100中既能被一个数整除又能被另一个数整除的所有数,并...
include<stdio.h> void main(){ int num1,num2;int s[100];int x,y;int i;int a=0,b;printf("请输入一个数字:");scanf("%d",&num1);printf("请再输入一个数字:");scanf("%d",&num2);for(i=1;i<=100;i++){ if(i%num1==0)x=1;else x=0;if(i%num2==0)y=1;...

c语言随机生成100个3位正整数
include "stdio.h"#include "time.h"#include "stdlib.h"int isprime(int n)\/\/判断n是否是素数,是返回1,不是返回0{ int i; for(i=2;i<=n\/2;i++) if(n%i==0) return 0; return 1;}int main(){ int a[100]={0}; int b[100]={0}; int i,j,count=0,tmp; srand...

C语言:编写一个程序实现1-100内所有数累加,并输出结果
int x=100;int sum;sum=(x+x*x)\/2;printf("%d\\n",sum);

C语言1乘到100怎么编写
double型浮点数可以胜任。设置1个int型变量i作为for循环控制变量,遍历1~100;设置1个初值为1.0的double型变量sum与i相乘保存部分积,当i遍历完成后sum便是所求结果。由于结果数字太大,得用科学计数法显示(显示的是近似值)。代码如下:\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line...

输出100以内的质数,用c语言编写
for(){ } \/\/for循环结束之后 j的值是大于i\/2的 因为for循环的条件是:j<=i\/2 \/\/因此 当j>i\/2时 for循环结束 if(j>i\/2)这里当且仅当2~i\/2都不能整除i时 也就是j>i\/2 才说明i是质数 参考资料 输出100以内的质数,用c语言如何编写?.百度知道[引用时间2017-12-25]...

蒲县18356972382: 用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(); }

蒲县18356972382: 用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); }

蒲县18356972382: 怎么用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) ...

蒲县18356972382: 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);

蒲县18356972382: 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 ...

蒲县18356972382: 用C语言程序求100的阶乘 -
禹促尼脉: int fun(int i) {if(i==1)return 1;return i*fun(i-1); }

蒲县18356972382: 1到100的阶乘 C语言程序 -
禹促尼脉: 举例说明算法:1!+2!+3!+……+n!=1+2*(1+3*(1+4*(1+5(1+.(1+(n-1)*(1+n)).)))) 不过当n=100貌似会溢出.因此要实现一个大数乘法的函数.#include<stdio.h> void main() { long sum; int n=100; sum=n; while(n!=1) { sum+=1; sum*=n-1;//使用大数乘法函数替代这里的处理 n--; } printf("%d\n",sum); }

蒲县18356972382: C语言做100的阶乘 -
禹促尼脉: #include#define Maxlen 10000#define N 100 //阶数100 int mult(int num[],int len,int n) { int i,rem=0; for(i=0;i{ rem+=num[i]*n; num[i]=rem%10; rem=rem/10; } if(rem>0) { num[len]=rem%10; len++; rem=rem/10; } return len; } main() { int num[Maxlen]; int ...

蒲县18356972382: 求编写一个求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类型的数据

蒲县18356972382: 用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的阶乘很大,所以用指数形式输出

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网