题目描述
输入一个正整数n(n<=20),输出1到n之间阶乘表。
输入
输入只有一个正整数n。
输出
输出1到n之间的阶乘表,格式见输出样例。每行两个数据,第一个数据占4列,第二个数据占20列,左对齐。
样例输入 Copy
5
样例输出 Copy
1 1
2 2
3 6
4 24
5 120
此为正确代码:
#include<stdio.h>
int main()
{
int n,i;
double c=1.0;//因为是double 型,所以定义C=1.0
scanf("%d",&n);
for(i=1;i<=n;i++)
{
c*=i;
printf("%-4d%-20.0lf\n",i,c);//注意输出的数为整数,所以将c保留0位小数
}
return 0;
}
如果将c定义为int型:(此题错解)
#include<stdio.h>
int main()
{
int n,i,c=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
c*=i;
printf("%-4d%-20d\n",i,c);
}
return 0;
}
当输入为5时正常:
但是当输入为20时:
出现了负数甚至 15!>16!说明输出已超过int范围,当超过时则减去最大值即只进行int范围内的运算;(自己也可以写一小段程序计算出某个数的阶乘看看是不是超出2^32)如下,供参考:
#include<stdio.h>
int main()
{
int i,n;
double c=1.0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
c*=i;
}
printf("%lf",c);
return 0;
}