求1-100的阶乘输入一个数,如果为1-100,输出阶乘(超过8位用科学计数法四舍五入保留8位有效数字),否则退出程序,
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/30 15:21:12
求1-100的阶乘
输入一个数,如果为1-100,输出阶乘(超过8位用科学计数法四舍五入保留8位有效数字),否则退出程序,C语言该怎么计算?
或者帮我改好下面的程序.下面的程序有误.改得完全正确的再加100分
#include
#define LD long double
#define ULL unsigned long long
LD f(int n){
return (n==1 (LD)1 :((LD)n *f(n-1)));
}
int main()
{
int flag=0,i=0,n=0;
LD y;
char str[20];
while(scanf("%d",&n)==1 && n0 ){
y=f(n);
if(y < 1.0e8 )
printf( "%d!= %d\n",n,(ULL)y );
else
{
sprintf(str,"%1.8e",y);
if( str[9] > '4')
{
str[8]++;
}
for(i=9;str[i];i++)
str[i] = str[i+1];
printf( "%d!= %s\n",n,str);
}
}
return 0;
}
上面的结果计算一百的阶乘是对的,输出格式也对
输入一个数,如果为1-100,输出阶乘(超过8位用科学计数法四舍五入保留8位有效数字),否则退出程序,C语言该怎么计算?
或者帮我改好下面的程序.下面的程序有误.改得完全正确的再加100分
#include
#define LD long double
#define ULL unsigned long long
LD f(int n){
return (n==1 (LD)1 :((LD)n *f(n-1)));
}
int main()
{
int flag=0,i=0,n=0;
LD y;
char str[20];
while(scanf("%d",&n)==1 && n0 ){
y=f(n);
if(y < 1.0e8 )
printf( "%d!= %d\n",n,(ULL)y );
else
{
sprintf(str,"%1.8e",y);
if( str[9] > '4')
{
str[8]++;
}
for(i=9;str[i];i++)
str[i] = str[i+1];
printf( "%d!= %s\n",n,str);
}
}
return 0;
}
上面的结果计算一百的阶乘是对的,输出格式也对
代码在四舍五入,遇到进位处为9时处理有误,比如16.
#include<stdio.h>
#define LD long double
#define ULL unsigned long long
LD f(int n){
return (n==1 (LD)1 :((LD)n *f(n-1)));
}
int main()
{
int flag=0,i=0,n=0;
LD y;
char str[20];
while(scanf("%d",&n)==1 && n<=100 && n>0 ){
y=f(n);
if(y < 1.0e8 )/*不超过8位,整形输出*/
printf( "%d!= %d\n",n,(ULL)y );
else
{
sprintf(str,"%1.8e",y);
if( str[9] > '4')/*超过4,进一位*/
{
if(str[8]<'9')
str[8]++;
else
{ i=8; while(str[i]=='9') str[i--]='0';str[i]++; }/*为9时不能直接+1,改为0后,进位*/
/*当所有位都为9时,需要进位并增加e后面的级数,还需要特殊处理,但是这种情况在1-100不会出现*/
}
for(i=9;str[i];i++)
str[i] = str[i+1];
printf( "%d!= %s\n",n,str);
}
}
return 0;
}
#include<stdio.h>
#define LD long double
#define ULL unsigned long long
LD f(int n){
return (n==1 (LD)1 :((LD)n *f(n-1)));
}
int main()
{
int flag=0,i=0,n=0;
LD y;
char str[20];
while(scanf("%d",&n)==1 && n<=100 && n>0 ){
y=f(n);
if(y < 1.0e8 )/*不超过8位,整形输出*/
printf( "%d!= %d\n",n,(ULL)y );
else
{
sprintf(str,"%1.8e",y);
if( str[9] > '4')/*超过4,进一位*/
{
if(str[8]<'9')
str[8]++;
else
{ i=8; while(str[i]=='9') str[i--]='0';str[i]++; }/*为9时不能直接+1,改为0后,进位*/
/*当所有位都为9时,需要进位并增加e后面的级数,还需要特殊处理,但是这种情况在1-100不会出现*/
}
for(i=9;str[i];i++)
str[i] = str[i+1];
printf( "%d!= %s\n",n,str);
}
}
return 0;
}
求1-100的阶乘输入一个数,如果为1-100,输出阶乘(超过8位用科学计数法四舍五入保留8位有效数字),否则退出程序,
输入一个正整数,输出该数的阶乘.求整数n的阶乘公式为:=1*2*…*n.(n!表示n的阶乘)
用四舍五入法取2394.7的近似数,保留3位有效数字,并用科学记数法表示为( )
0.020700009用科学计数法(保留两位有效数字)
将数字28909.6用科学计数法(保留两位有效数字)表示为
C语言求阶乘给一个整数,请输出该数字阶乘的后缀0的个数,例如:数字7,它的阶乘为5040,后面有一个0,则输出1;还有数
0.000958四舍五入保留一个有效数字,用科学计数法表示为
38400KM 用科学计数法 保留2位有效数字 表示38400为
求阶乘运算程序内容:从计算机键盘任意输入一个1位十进制数据,要求使用汇编语言编写程序实现计算该数据的阶乘,要求屏幕有提示
-0.0002976科学计数法,保留两位有效数字
数学的科学计数法:比如0.000000789用科学计数法表示,但要保留两位有效数字.
设计一个`四舍五入'电路.该电路输入为1位十进制数的8421码,当其值大于走等于5时,输出F的值为1,否则F的值为O.求