啊哈磊_编程从这里起步

标题: 大家帮我看看这个是哪里出问题了? [打印本页]

作者: 海南小石    时间: 2014-3-5 21:56
标题: 大家帮我看看这个是哪里出问题了?
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.         printf("1*3*...*99=? \n");
  6.     int i=1,t=1;
  7.     while(i<=99)
  8.     {
  9.     t=t*i;
  10.     i=i+2;
  11.     }
  12.     printf("1*3*...*99=%d \n",t);
  13.         system("pause");
  14.         return 0;
  15. }
复制代码
我是想求1*3*...*99的值。
但是运行出来的值是这个:

求助怎么改?

9PMQB93SU54WN@6%{O14~SG.jpg (6.1 KB, 下载次数: 3)

运行结果

运行结果

作者: 李掌柜    时间: 2014-3-5 22:11
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.         double i=1,t=1;   //类型改下试试~~
  6.     printf("1*3*...*99=? \n");  
  7.     while(i<=99)
  8.     {
  9.         t=t*i;
  10.         i=i+2;
  11.     }
  12.     printf("1*3*...*99=%d \n",t);
  13. system("pause");
  14. return 0;
  15. }
复制代码

作者: 4399APPLE    时间: 2014-3-6 08:56
上溢,建议用double类型,要double溢出可不是那么容易的~
作者: 刘玟羽    时间: 2014-3-6 10:13
有符号整型最大值32767,无符号整形最大值65535。很明显你的结果溢出了
作者: rosynirvana    时间: 2014-3-6 12:42
刘玟羽 发表于 2014-3-6 10:13
有符号整型最大值32767,无符号整形最大值65535。很明显你的结果溢出了

这又是老古董数据了
32位int能达到21亿
作者: rosynirvana    时间: 2014-3-6 12:44
大数乘法用C的内置类型放不下
要自己模拟
初学者别尝试了,写起来真的很烦躁的
作者: tao6980919    时间: 2014-3-14 00:09
double 就可以解决
作者: rosynirvana    时间: 2014-3-14 00:34
说用double的别逗了
哪里算阶乘只要十几位数字的?
作者: womei520    时间: 2014-3-14 18:29
不懂不懂不懂不懂




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2