上面几楼都不可以成功,因为他们没有考虑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);
}
}
求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内的整数。