OJ1048: 阶乘表(C语言)(易错,关于int和double范围问题)
生活随笔
收集整理的這篇文章主要介紹了
OJ1048: 阶乘表(C语言)(易错,关于int和double范围问题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
輸入一個正整數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.0scanf("%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)如下,供參考:
總結
以上是生活随笔為你收集整理的OJ1048: 阶乘表(C语言)(易错,关于int和double范围问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows常用命令集
- 下一篇: OJ1052: 数列求和4(C语言)