求1-100的阶乘输入一个数,如果为1-100,输出阶乘(超过8位用科学计数法四舍五入保留8位有效数字),否则退出程序,C语言该怎么计算?或者帮我改好下面的程序.下面的程序有误.改得完全正确的再加
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/29 02:46:34
![求1-100的阶乘输入一个数,如果为1-100,输出阶乘(超过8位用科学计数法四舍五入保留8位有效数字),否则退出程序,C语言该怎么计算?或者帮我改好下面的程序.下面的程序有误.改得完全正确的再加](/uploads/image/z/3726733-13-3.jpg?t=%E6%B1%821-100%E7%9A%84%E9%98%B6%E4%B9%98%E8%BE%93%E5%85%A5%E4%B8%80%E4%B8%AA%E6%95%B0%2C%E5%A6%82%E6%9E%9C%E4%B8%BA1-100%2C%E8%BE%93%E5%87%BA%E9%98%B6%E4%B9%98%28%E8%B6%85%E8%BF%878%E4%BD%8D%E7%94%A8%E7%A7%91%E5%AD%A6%E8%AE%A1%E6%95%B0%E6%B3%95%E5%9B%9B%E8%88%8D%E4%BA%94%E5%85%A5%E4%BF%9D%E7%95%998%E4%BD%8D%E6%9C%89%E6%95%88%E6%95%B0%E5%AD%97%29%2C%E5%90%A6%E5%88%99%E9%80%80%E5%87%BA%E7%A8%8B%E5%BA%8F%2CC%E8%AF%AD%E8%A8%80%E8%AF%A5%E6%80%8E%E4%B9%88%E8%AE%A1%E7%AE%97%3F%E6%88%96%E8%80%85%E5%B8%AE%E6%88%91%E6%94%B9%E5%A5%BD%E4%B8%8B%E9%9D%A2%E7%9A%84%E7%A8%8B%E5%BA%8F.%E4%B8%8B%E9%9D%A2%E7%9A%84%E7%A8%8B%E5%BA%8F%E6%9C%89%E8%AF%AF.%E6%94%B9%E5%BE%97%E5%AE%8C%E5%85%A8%E6%AD%A3%E7%A1%AE%E7%9A%84%E5%86%8D%E5%8A%A0)
求1-100的阶乘输入一个数,如果为1-100,输出阶乘(超过8位用科学计数法四舍五入保留8位有效数字),否则退出程序,C语言该怎么计算?或者帮我改好下面的程序.下面的程序有误.改得完全正确的再加
求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的阶乘输入一个数,如果为1-100,输出阶乘(超过8位用科学计数法四舍五入保留8位有效数字),否则退出程序,C语言该怎么计算?或者帮我改好下面的程序.下面的程序有误.改得完全正确的再加
代码在四舍五入,遇到进位处为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;
}