求10^100!的C或C++代码

高手可给出一般编程方法,谢了!
问题重要补充:不是10^(100!),是(10^100)!

上面几楼都不可以成功,因为他们没有考虑100!结果太大

著名的计算机科学家奥思提出一个公式:

                           程序 = 数据结构 + 算法

这里面要考虑高进位问题,因为100!的结果很大,即使是long int也不够,所以得特殊考虑。我先给出一般的:1!~~15!的程序 我用的是递归

#include <stdio.h>

#include <stdlib.h>

int f(int n)

{

    long t;

    if(n==1||n==0)  t=1;

    else t=n*f(n-1);

    return t;

}

int main()

{

    long num=0;

    int i;

    for(i=1;i<=10;i++)

    {

        num=f(i);

        printf("%d ! = %ld\n",i,num);

    }

}

至于你要求100!,因为其结果太大,只能太数组,把每一位数字存进想应的数组中,比如:a[1]存个位数,a[2]存十位数······这个就是数据结构。

算法如下:

#include <iostream>

using namespace std;

void f(int n)

{

    int i,j,k;

    int temp=0; //存放进位的数

    int a[1000]={0};//利用数组求阶乘

    a[1]=1;

    for(i=1;i<=n;i++)

    {

        for(j=1;j<=1000;j++) //求每一位上的数值

        {

            temp=temp+a[j]*i; //第j位上的数字与i相乘加上原来进位的数

            a[j]=temp%10;   //求余赋给第j位

            temp=temp/10;   //再整除10进位给j+1位

        }

    }

    for(i=1000;i>0;i--)   //把前导零忽略

    {

        if(a[i]==0) continue;

        else { k=i;break;}

    }

    for(i=k;i>0;i--)   //从最高位输出

    cout<<a[i];      //既从第一位非零的数字输出

    cout<<endl;

}

int main()

{

    int i;

    for(i=10;i<=100;i++)

    {

        cout<<i<<" ! = ";

        f(i);

    }

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-16
void main()
{
int result=1;
for(int i=0;i<100;i++)
result*=10;
print(result)
}
这里只是一个算法

但是实际计算的时候会出错 因为C中一个int类型变量 是 4个字节,大小就是2的31次方 不够存放这么大的数字
第2个回答  2010-04-16
有两个函数可以实现,double pow(double x, double y),double pow10(int p)
下面是这两个函数的使用方法,个人建议用:pow10(n)

函数名: pow
功 能: 指数函数(x的y次方)
用 法: double pow(double x, double y);
程序例:

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

int main(void)
{
double x = 10, y = 100;

printf("%lf raised to %lf is %lf\n", x, y, pow(x, y));
return 0;
}

函数名: pow10
功 能: 指数函数(10的p次方)
用 法: double pow10(int p);
程序例:

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

int main(void)
{
double p =100;

printf("Ten raised to %lf is %lf\n", p, pow10(p));
return 0;
}
第3个回答  2010-04-19
估计等算出来的时候,地球都毁灭N次了!
楼主不要为了做题而做题,这个题理论解是存在的,但是,你有生之年估计看不到计算出来的结果了!
第4个回答  2010-04-16
#include<iostream.h>
double fun( int n,int m){
double x=1;
for( int i=0;i<m;i++){
x=x*n;}
return x;
}

void main()
{
cout<< "the ans is:"<<fun(10,100)<<endl;

}

可得出答案
第5个回答  2010-04-16
啊,那么麻烦干嘛呢,直接定义double不就行了,再用两个for循环搞定。
#include "stdio.h"
void main()
{
double i,j,sum;
for(i=10;i<=100;i++) {
sum=1;
for(j=1;j<=i;j++)
sum*=j;
printf("%.0f!=%.0f.\n",i,sum);
}
}

求10^100!的C或C++代码
int temp=0; \/\/存放进位的数 int a[1000]={0};\/\/利用数组求阶乘 a[1]=1;for(i=1;i<=n;i++){ for(j=1;j<=1000;j++) \/\/求每一位上的数值 { temp=temp+a[j]*i; \/\/第j位上的数字与i相乘加上原来进位的数 a[j]=temp%10; \/\/求余赋给第j位 temp=temp\/10; \/\/...

急求!C语言实现a+b,有条件,0<=a,b<=10^100
an1[i] += an2[i] ;if( an1[i] >= 10 ){ an1[i] -= 10 ;an1[i + 1] ++ ;} } return 0;}

C++:随机生成10~100字符的大小写英文字母字符串,作下列要求的操作,咋...
while(cout << "Y\/N==",(cin >> k) && (k=='Y' || k=='y')){ for(s="",i=rand()%91+10;i--;)\/\/生成10~100大小写字母串 s+=rand()%26 + (rand()%2 ? 65 : 97);cout << s << endl;\/\/原串输出 for(t=s.length(),i=0;i<t;i++)\/\/先输出大写 if(s[...

在C语言中大于10的100次方的数要怎样输出
你说的这个题最后的结果是超出任何数据类型范围的,应该考的是模拟运算过程那种算法,你可以用字符数组来一位一位的存一个输,然后模拟10的100次方运算的过程来改变原有数组的字符,最后经过处理的字符数组里就是运算的结果

用C和C+++如何输出一个有效数字在100位以上的数???
c = z[i]+d*10;z[i] = c \/ b;d = c % b;} \/\/x+=z;Run = 0;for(int i=ARRSIZE-1; i>0; i--){ c = x[i] + z[i];x[i] = c%10;x[i-1] += c\/10;Run |= z[i];} a++;b+=2;} printf( "Pi=%d.", x[1] );for(int i=0; i<DISPCNT; i++)...

求100!等于多少用c++解决
1]%10(length>=1,a[length]=a[length]+a[length-1]\/10;每次乘下标都从0到length,大于 等于10则进位。include<stdio.h> void main(){ int a[10000],length;int i,j,n,m;a[0]=1;a[1]=0;length=0;scanf("%d",&n); \/\/输入要计算的阶层 printf("\\n");if(n<0)printf("...

求100行左右的代码(C语言,c++,数据结构编写的均可)
int num;char book_name[30];char writer[30];char sort_num[3];char pub_company[30];char pub_time[30];char prise[30];};typedef struct library LIB; \/*结构体的定义用于存放书籍及借书的信息*\/ LIB lib[N];FILE *fp; int all=0;int menu(void);void input(void);void out...

求一个C++程序代码?要求输入阿拉伯数字输出中文数字高手进
i_tmp3=i_tmp\/100;i_tmp=i_tmp%100;i_tmp2=i_tmp\/10;i_tmp1=i_tmp%10;if (i_tmp5){ cout<<str[i_tmp5*2]<<str[i_tmp5*2+1]<<str[26]<<str[27]<<str[i_tmp4*2]<<str[i_tmp4*2+1]<<str[24]<<str[25]<<str[i_tmp3*2]<<str[i_tmp3*2+1]<<str[22]<...

C语言 统计10-100之间的个位数为6且能被3整除的数的个数 用C++编写程 ...
这道题很简单啊,只需要用一个循环加判断累加就可以了,代码如下:include<cstdio>int ans=0;\/\/累加器 int main(){for (int u=10;u<=100;u++)\/\/循环 {if (u%10==6&&u%3==0) ans++;\/\/判断并累加 }printf("%d",ans);\/\/输出答案 return 0;}当然,这是还没优化的(不过这题也...

怎么用C++编写一个rand()函数,功能上是产生10个0-100之间的随机整数
电脑、C语言编译器。1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp。2、在test.cpp文件中,输入C语言代码:for (int i = 0; i < 10; i++)printf("%d ", rand() % 100 +1);3、编译器运行test.cpp文件,此时成功通过rand产生了10个1-100内的整数。

相似回答