|
发表于 2019-8-31 00:34:13
|
显示全部楼层
本帖最后由 jackz007 于 2019-8-31 10:26 编辑
这个代码简化的是否到位?
- #include <stdio.h>
- unsigned int jiechen(int num)
- {
- unsigned int result ;
- int k ;
- if(num > 0) for(result = 1 , k = 1 , k <= num ; k ++) result *= k ;
- else result = 0 ;
- return result ;
- }
- main(void)
- {
- int a ;
- unsigned int b ;
- while(1) {
- printf("请输入整数:") ;
- if(scanf("%d" , & a) == 1) {
- b = jiechen(a) ;
- printf("结果为:%u\n" , b) ;
- } else {
- break ;
- }
- }
- }
复制代码
如果规定必须采用递归算法,那就是下面的代码:
- #include <stdio.h>
- unsigned int jiechen(int num)
- {
- unsigned int result ;
- result = 0 ;
- if (num > 1) result = num * jiechen(num - 1) ;
- else if(num == 1) result ++ ;
- return result ;
- }
- main(void)
- {
- int a ;
- unsigned int b ;
- while(1) {
- printf("请输入整数:") ;
- if(scanf("%d" , & a) == 1) {
- b = jiechen(a) ;
- printf("结果为:%u\n" , b) ;
- } else {
- break ;
- }
- }
- }
复制代码
这个代码采用 32 位整型变量,只能计算 12 以内的阶乘,如果改用 64 位整型变量,则可以计算 20 以内的阶乘,如果超出,计算结果将是溢出后的错误数值:
- #include <stdio.h>
- unsigned long long jiechen(int num)
- {
- unsigned long long result ;
- result = 0 ;
- if (num > 1) result = num * jiechen(num - 1) ;
- else if(num == 1) result ++ ;
- return result ;
- }
- main(void)
- {
- int a ;
- unsigned long long b ;
- while(1) {
- printf("请输入整数:") ;
- if(scanf("%d" , & a) == 1) {
- b = jiechen(a) ;
- printf("结果为:%I64u\n" , b) ; // 这一句有问题,试试写成这样:printf("结果为:%llu\n" , b) ;
- } else {
- break ;
- }
- }
- }
复制代码
上述代码采用 tdm-gcc 成功编译运行。 |
|