c++编写程序精确计算100!的值
//利用公式e=1+1/1!+1/2!+...+1/n!
#include "iostream"
using namespace std;
double fact(int n)
{
double sum=1.0;
int i;
for(i=1;i<=n;i++)
sum*=i;
return sum;
}
int main()
{
double e=0,f,item=1;
int i;
cout<<"请输入精度:";
cin>>f;
for(i=0;;i++)
{
item=1/fact(i);
e+=item;
if(item<f)
break;
}
cout<<"e="<<e<<endl;
}
#include #include #include // 精度控制using namespace std;int main(){ double start = 1.0; double e = 1.0; // 8.0 精度控制 for (double i = 1.0; start < pow(10.0, 8.0); i = i + 1){start *= i;e += 1.0/start; } // setprecision(7) 精度控制 cout << setprecision(7) << e << endl; system("pause"); return 0;}
#include <iostream>
using namespace std;
#define MaxBit 300
int result[MaxBit]={0}; //初始化数组为0,100!结果的位数肯定不超过300位,在这里定义300足够了。
void Compute(int n)
{
//一个int值n乘以一个数组
//数组的第0位表示大数的最低位
//思路:
//先用最低位乘以n
//最低位的进位肯定是0,所以result[j] += aboveTen;没有问题
//十位数以上的值都是应该加到下一位的,暂时存储在变量aboveTen里面 aboveTen = result[j] /10;
//然后将个位数还保存在原位result[j] %= 10;
int aboveTen=0;
for(int j=0; j<MaxBit; j++)
{
result[j] *= n;
result[j] += aboveTen;
aboveTen = result[j] /10;
result[j] %= 10;
}
}
int main()
{
result[0] = 1; //第一个数设为1
for(int i= 1; i<=100; i++)
Compute(i);
//取最高位第一个不为0的值
int bit = 0;
for(bit=MaxBit-1; bit>=0; bit--)
if(result[bit] != 0)
break;
//从最高位开始输出结果
while(bit >=0)
cout << result[bit--];
cout << endl; //分给我吧^_^
return 0;
}
#include <stdio.h>
int main()
{
int n;
int a[9000]; //确保保存最终运算结果的数组足够大
int digit = 1; //位数
int temp; //阶乘的任一元素与临时结果的某位的乘积结果
int i,j,carry; //进位
printf("please in put n:\n");
scanf("%d",&n);
a[0] = 1; //将结果先初始化为1
for(i = 2; i <= n; i++)
{ //开始阶乘,阶乘元素从2开始依次"登场"
//按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘
for( j = 1, carry = 0; j <= digit; j++)
{ //carry:进位
temp = a[j-1] * i + carry; //相应阶乘中的一项与当前所得临时结果的某位//相乘(加上进位)
a[j-1] = temp % 10; //更新临时结果的位上信息
carry = temp / 10; //看是否有进位
}
while(carry)
{ //如果有进位
a[++digit-1] = carry % 10; //新加一位,添加信息。位数增1
carry = carry/10; //看还能不能进位
}
}
printf("n ! = "); //显示结果
for(j = digit; j >=1;j--)
{
printf("%d",a[j-1]);
}
printf("\n");
return 0;
}
这个是我从百度知道上找来的,希望对你有帮助
摘自维基百科
计算n!时,当n不太大时,普通的科学计算机都可以计算,能够处理不超过10^100数值的计算机可以计算至69!。
当n很大时,可以用斯特林公式估计: n!≈√(2πn)(n/e)^n
更精确的估计是: n!≈√(2πn)(n/e)^n*e^λn
其中 1/(12n+1)<λn<1/12n
#define N 1000 //要计算的阶乘
long s[N]={1,1};
long n=N;
long t=2;
long a=1;
long b=0;
void f(void)
{
for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
{
s[a] = (b+=s[a]*t)%10000,b/=10000;
}
for(printf("%d",s[*s]);--*s > 0; )
printf("%04d",s[*s]);
}
这个就够用了
int i;
double s=1;
for(i=1 ;i<=100;i++)
{
s=s*i;
}
编写程序求2+4+6+8...+100的值并输出结果?
include<stdio.h> main(){ int i,sum=0;\/\/这是一个等差数列,公差为2,首项也为2;for(i=2;i<=100;i=i+2)\/\/ { sum=sum+i;\/\/i从2开始,每次加2,直到1=100;} printf("%d",sum);return 0;}
编程求当N<=100时,N!的准确值,c语言程序是什么样的,谢谢你了
void multi(int a[],int b[]) \/\/核心程序,非常难调啊!!!{ int tp[1000]={0};int i,j,t,p,m,n;for (m=3;b[m]==0;m--);for (n=999;a[n]==0;n--);for (j=0;j<=m;j++){ t=0;for ( i=0;i<n+2;i++){ p=b[j]*a[i]+t+tp[i+j];tp[i+j]...
c++程序:看看我这个1到100的求和程序有什么错误!
int i,s;i=1,s=0;do { s+=i;i++;}while(i<101);printf("s=%d\\n",s); } 如果你上面的源程序是复制过来的话,那么,MAIN(){程序段。。。}这样才完整,显然你少了个{}。S是整数型变量,初值应该是数字0而不要打成字母o WHILE后面的条件应该是i<101或i<=100这样才会运算到100,...
编写一个程序,计算100+101+…+300的值
可以用C语言写:include<iostream> using namespace std;int main(){ int res = 0;for (int i = 100; i <= 300; i++){ res += i;} cout << "The sum from 100 to 300 is " << res << endl;return 0;} 结果为:
C语言程序编写 计算表达式 1 + 2 + 3 + ... + 100的值。
C语言程序编写 计算表达式 1 + 2 + 3 + ... + 100的值可以参考下面的代码:include<stdio.h> void main() { int i,s;for ( i=1,s=0;i<=100;i++ ) s+=i;printf("sum = %d\\n",s);}
编写程序求2+4+6+8...+100的值并输出结果
include<stdio.h>int main() { int res = 0; for (int i=1; i<=50; ++i) { res += 2*i; } printf("结果:%d\\n", res); return 0;}
用C语言编写程序:两个100位的数字相加,输出计算结果,并算出计算结果中0...
void main(){ int a[100],b[100],c[101];int i,j;int m=0;srand( (unsigned)time(NULL));for(i=100;i>0;i--){ a[i] = rand()%10;} for(j=100;j>0;j--){ b[j] = rand()%10;} for(i=0;i<100;i++){ c[i]=a[i]+b[i];if(c[i]>=10){ c[i+1]++;...
java中计算1+2+3+...+100的值
if(a=1){ return a; } else{ return a+addLessByOne(a-1); } }}你说要输入1+2+3+4...+100 这里我不太确定,真的是输入这么长一串还是什么。我的里面那个100我直接写进去了,你也可以让人输入一个大于等于1的整数。
C语言:计算1+2+3+...+100的平均值,保留两位小数.
如下:include<stdio.h> int main(){ float sum=0.0;int i=1;for(i=1;i<=100;++i) sum+=i;sum\/=100;printf("%.2f\\n", sum);return 0;} 虽然不应该这样,但挂科还是很难受的。我心比较软,唉!
编写一个程序,计算1~100之间所有能被25,33,或46整除的自然数之和,并...
这是用C++编的,可以显示出所有1~100之间满足要求的数,然后求出它们的和 include <iostream> using namespace std;int main(){ int sum = 0;for (int i = 1; i <= 100; i++){ if (i % 25 == 0 || i % 33 == 0 || i % 46 == 0){ cout << i << " ";sum += ...