c语言 求100!的位数及其具体数值。

供稿:hz-xin.com     日期:2025-01-14
求100!的位数及具体数值(c语言)

#include
#define maxlen 10000
#define N 100
int mult(int num[],int len,int n)
{
int i,rem=0;
for(i=0;i<len;i++)
{
ren+=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);
printf("%d
",len*strlen(int));
for(i=len-1;i>=0;i--)
printf("%d",num[i]);
printf("
");
}
没有调试,应该不会错多远。

数据类型的大小(即所占字节数)以及能够表示的数据范围是与编译器和硬件平台有关的。"float.h"头文件(如vc6.0,在include目录下)通常定义了基本数据类型能够表示的数据的最大值和最小值。你也可以使用 sizeof 来获得类型的大小(即所占字节数) 。主流平台如Windows,在vc编译器下,char(1字节),short(2字节),int(4字节),float(4字节),long(4字节),double(8字节)。

sizeof在C语言中是判断数据类型长度符(即所占字节数)的关键字 。具体使用方法,为sizeof(类型说明符、数组名、变量名、表达式甚至具有明确返回值类型的函数)。

跟你说一下思路

1.求100! 肯定不能用楼上方法 没有那么大的数据结构存 给你说个方法(算到1000都没问题):
用数组表示结果数字每一位的数字 刚才用计算器看了一下 100!有10的100多次方 所以你开个 200的数组肯定够了 然后从2算起 a【0】存2 比如算到3 a【0】存6 然后到4就有进位 所以a【0】存4 a【1】存2 这个数就是24 注意进位 这是递推法 一直算到100就可以了 要用变量表示数组存到哪里了 所以最后就知道有多少位 数值也知道了(从后向前打印)

2.这个用循环显然有些麻烦 可以考虑 排列组合 123456789 下来是123456798 下来是123456879 。。。。。这样就可以试遍算有可能 然后就简单了 注意用数组表示 所以很好验证值

3.验证三角形还不简单:把距离都算出来 最小的两个和要比第三个大。。。。
不就好了

这些我都做过 肯定可以 第一个题是我们原来的考试题 就是这么做的 原来写了文件没了 不过我有算2的50次方的 也使用这方法 你可以看一下:
//compute the power of 2 the power can be as large as 10000 it will take some time to do it
//display the first 500 digits place 0 when no number exits
//AUTHOR: LIHAO
//DATE: 2 Dec 2008
#include<iostream>
using namespace std;
int a[1000000];
int main()
{
unsigned long p;
unsigned long digit=1;
int carry=0;
a[1]=2;
cin>>p;
for(int i=1;i<p;i++){
for(int j=1;j<=digit;j++){
int k=a[j];
a[j]=carry+(a[j]*2)%10;
carry=(2*k)/10;
}

if(carry){
a[digit+1]=1;
digit++;
}
carry=0;
}
a[1]--;
cout<<digit<<endl;
if(digit>=500){
for(int i=500;i>=1;i--){
if(i%50==0){
cout<<endl;
}
else{
cout<<a[i];
}
}
}
else{
for(int j=digit, k=1;j>=1;j--,k++){
if(k%50==0){
cout<<endl;
}
else{
cout<<a[j];
}
}
int k=digit%50+1;
for(int j=digit+1;j<=500;k++,j++){
if(k%50==0){
cout<<endl;
}
else{
cout<<"0";
}
}
}
cout<<endl;
system("PAUSE");
}

第二个 排列组合 算法我有:
///////////////////////////
/////Programed by LiHao////
////to permutate number////
////all rights reserved////
///////////////////////////
#include<stdio.h>
#define N 100
void permutation(int n)
{int a[N],m,j,k,temp,i,p=0;
for(i=1;i<=n;i++){
a[i]=i;
printf("%2d",a[i]);
}
p++;
printf("\n");
while(1){
i=n-1;
while(a[i]>a[i+1]&&i>1){
i--;
}
k=n;
while(a[k]<a[i]&&k>1){
k--;
}
if(k==i){break;}
else{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
for(j=n;j>i+1;j--){
for(k=i+1;k<j;k++){
if(a[k]>a[k+1]){
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
}
}
for(m=1;m<=n;m++){
printf("%2d",a[m]);
}
printf("\n");
p++;
}
printf("% d\n\n",p);
}
void main()
{int n;
scanf("%d",&n);
permutation(n);
}

很早写的 有c和c++ 你看吧

我会算10!与位数
#include<stdio.h>
void main()
{
int b=1;
int a=10;
int c=0;
int d=9;
int e=0;
for(a=10;a>0;a--)
{
b=b*a;
}
printf("%d\n",b);
for(d;;d*=10)
{
c=b-d;
e++;
if(c<=0)
{
printf("%d",e);
break;
}
}
}

c语言 求100!的位数及其具体数值。
1.求100! 肯定不能用楼上方法 没有那么大的数据结构存 给你说个方法(算到1000都没问题):用数组表示结果数字每一位的数字 刚才用计算器看了一下 100!有10的100多次方 所以你开个 200的数组肯定够了 然后从2算起 a【0】存2 比如算到3 a【0】存6 然后到4就有进位 所以a【0】存4 a...

用C语言编一个程序: 计算100!的整型值结果和这个结果的位数。输出时每...
100的阶乘有158位 93326215443944152681699238856266700490715968264381 62146859296389521759999322991560894146397615651828 62536979208272237582511852109168640000000000000000 00000000 请按任意键继续. . .

100!末尾有多少个0C语言
故100!末尾共有24个0。算法描述:从4!=24开始计算,如果阶乘值末尾为0,就把末尾0去掉,计数器加1;如果末尾不为0,只保留个位数即可。最后再进行一次末尾0的扫描操作。C语言程序:include <stdio.h> void main(){ int i;long f = 24;int c = 0;for(i=5; i<=100; i++){ f *= i...

如何用c语言求100!的准确值
{ int c[5000]={1,1}; \/*用于保存乘积的每一位数的数组*\/ prt(cc(c,100)); \/*cc(c,100)是求100!并将结果保存到c数组中,并用prt输出这个数组的内容*\/ return 0;} \/\/--- \/\/---

c语言编程:计算100!要求是精确值。 大家帮帮忙了!
main(){long i,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();}

用c语言编写100!(100的阶乘)
\/\/ 超过1000的话会溢出,因为最大的六位数 \/\/乘以4位数可能超过32位整数的范围 \/\/ 当处理大一点的阶乘的话就要相应减小这个值 \/\/ 所以当你求1千万的阶乘的时候记得base是10,呵呵。unsigned int a[SIZE];void jiechen(int n){ int i, j;int carry; \/\/进位 int max =0; \/\/最...

求教关于单片机c语言求百十个位数的问题
0x30是字符0的所表示的值!!而百位 十位 个位 加0x30是使其变为相应字符!!例如1+0x30就是字符1的值!!

用c语言编程:输入一个四位数,求出它的个位、十位、百位、千位_百度知 ...
--- VC++中代码如下:include "stdafx.h"include <stdlib.h> int main(int argc, char* argv[]){ int a;scanf("%d",&a);printf("个位:%d,十位:%d,百位:%d,千位:%d",a%10,a%100\/10,a%1000\/100,a\/1000);system("pause");return 0;} C语言有以下几种取整方法:1、直接赋值给整数...

输入一个三位数,分别求出百,十,个位数各为多少?vb语言程序设计
private sub command1_click()a=val(inputbox("输入一个三位数"))if a>=100 and a<=999 then print "百位数: "; a\\100 print "十位数: "; a\\10 mod 10 print "个位数: "; a mod 10 else print a; "不是三位数!"end if end sub ...

用c语言分别输出个位十位和百位的数字?
用c语言分别输出个位十位和百位的数字,可以根据下面步骤进行,c语言作为一种程序代码,因此在输入时绝对不能弄错任何符号。include<stdio.h> int main(){int x;scanf("%d",&x);printf("%d的百位=%d,十位=%d,个位=%d\\n",x,x\/100,x\/10%10,x%10);return 0;} ...