昨天(2018/12/7)在做C语言的课后练习题的时候,有一道题要求我们计算1~20的阶乘之和。代码很快就写出来了,考虑到结果的值会比较大,而在Windows操作系统下,int 类型和 long 类型居然都是4个字节(C#中long类型是八个字节,找同学试了下,Linux下C语言的long类型好像也是八个字节),所以我使用double类型。代码如下:

1 #include

2

3 intmain()4 {5 double n = 1, sum = 0;6 for (int i = 1; i <= 20; i++)7 {8 n *=i;9 sum +=n;10 }11 printf("%lf",sum);12 }

结果输出了:2561327494111820300.000000

我以为我得到了正确的结果,但我将同样的算法搬到C#中之后,却好像不是那么回事。(考虑到C#中long类型是八个字节,范围足够大,所以在C#中我直接使用了long类型。)代码如下:

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 usingSystem.Threading.Tasks;6

7 namespaceHomework8 {9 classProgram10 {11 static void Main(string[] args)12 {13 long n = 1, sum = 0;14 for (int i = 1; i <= 20; ++i)15 {16 n *=i;17 sum +=n;18 }19 Console.WriteLine(sum);20 Console.ReadKey();21 }22 }23 }

得到的结果是:2561327494111820313

相差了13?什么鬼?我不(ji)厌(qi)其(wu)烦(liao)的按着计算器(科学计算器里有求阶乘的函数),得到的结果和我在C#里得到的一模一样。那C得出来的是什么鬼(其实在C#里将long改成double,得出来的好像也有误差)。而且我尝试着在输出结果之前,手动把sum加上了13,即在输出之前加入这么一条语句“sum += 13;”,发现……并没有什么用,结果还是 2561327494111820300.000000。那……加100?没用!加200?没用!加300?神奇的事情发生了,得到了 2561327494111820800.000000!???等下,这不是加了500麽,我只给它加了300。。。哭笑不得。

对于具体原因我没有搞懂,可能是浮点数在计算机里的存储和计算有关吧,可能造成了舍入误差。反正就是数据类型的问题。

那在Windows环境下用C语言做这道题,还得用 long long 类型。于是乎,C语言的代码变成了:

1 #include

2

3 intmain()4 {5 long long n = 1, sum = 0;6 for (int i = 1; i <= 20; i++)7 {8 n *=i;9 sum +=n;10 }11 printf("%I64d",sum);12 }

输出说明符是“%I64d”,百度来的。总之结果是对了:2561327494111820313。

所以,您也别纠结网上有的回答 2561327494111820300 得到了200+赞,却同时得到了600+踩了。至于得到结果 268040729 的,要么是int类型溢出(Windows操作系统下C语言的 long 类型也会溢出),要麽是结果输出的时候用了“%d”格式说明符导致溢出。

PS:long long数据类型好像是C99标准增加的,而VC++6.0(别问我为什么说到这个东西)是在C99之前出现的东西,所以以上代码在VC++6.0里并不能使用。另外,VC++6.0也不支持“for (int i = 1; i <= 20; i++)”这种写法,变量 i 的声明得在for循环语句之前声明。

原文:https://www.cnblogs.com/Luquan/p/10088319.html

c语言要计算20,用C语言计算1~20的阶乘之和相关推荐

  1. C语言——一个正整数如果等于组成它的各位数字的阶乘之和,该整数称为阶乘和数。

    int fact(int n)//求阶乘 {if(n==0||n==1)return 1;elsereturn n*fact(n-1); } int main() {long long int sum ...

  2. 用C语言计算1到20的阶乘之和,用C语言计算1~20的阶乘之和

    昨天(2018/12/7)在做C语言的课后练习题的时候,有一道题要求我们计算1~20的阶乘之和.代码很快就写出来了,考虑到结果的值会比较大,而在Windows操作系统下,int 类型和 long 类型 ...

  3. 如何用Python一门语言通吃高性能并发、GPU计算和深度学习

    [CTO讲堂]如何用Python一门语言通吃高性能并发.GPU计算和深度学习 发表于2016-01-04 15:11| 4374次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCT ...

  4. c语言调用函数计算分段函数值,输入x,计算并输出下列分段函数f(x)的值(保留2位小数) c语言...

    计算分段函数输入 x ,计算并输出 y 的值.公式如下 当x >= 0时,f(x) = x^0.5,当x小于0时,f(x #include#include//[1{intmain()//你所写的 ...

  5. C语言 1A gt $20,C语言输出 1到20 的阶乘之和

    除了调用库,绝对找不到比这更精简的代码了. #include #include long long getdata(long long n){ long long sum = 1; while(n){ ...

  6. 中南大学 科学计算和MATLAB 初级语言学习

    中南大学 计算科学与MATLAB语言 导论 Maltble 使用的优势 不需要了解过各个这种数值计算的方法的具体计算细节和计算公式 可以专注于实际问题的分析和设计,大大地提高工作效率和质量,伪可u邪恶 ...

  7. 7-1 计算职工工资c语言,C语言职工工资管理系统

    一. 设计需求说明 一.职工工资管理系统功能设计要求 1. 输入记录:将每一个职工的姓名.ID号以及基本工资.职务工资.岗位津贴.医疗保险.公积金的数据作为一个记录.该软件能建立一个新的数据文件或给已 ...

  8. 学生成绩计算的c语言,学生成绩标准管理系统C语言.doc

    福建工程学院计算机和信息科学系 试验汇报 20XX – 20XX 年第 1 学期 任课老师: 章静 课程名称 结构化程序综合设计 班级 计算机1001 座号 姓名 张扬文 试验题目 学生成绩管理系统 ...

  9. feedback算法C语言,Learner Reviews Feedback for 计算导论与C语言基础 Course | Coursera

    1 - 25 sur 374 Avis pour 计算导论与C语言基础 Filled StarFilled StarFilled StarStarStar par Wan K• 16 août 201 ...

  10. 用计算机怎么计算r角度,R语言中的数学计算

    原标题:R语言中的数学计算 前言 R是作为统计语言,生来就对数学有良好的支持,一个函数就能实现一种数学计算,所以用R语言做数学计算题特别方便.如果计算器中能嵌入R的计算函数,那么绝对是一种高科技产品. ...

最新文章

  1. CentOS下SVN服务的启动与关闭
  2. 树状数组 _ 求逆序数
  3. Android 贴纸样式标签
  4. Autolayout代码实现举例-01使用线性公式
  5. webcontent 与 webroot 问题解决
  6. 网易2016游戏技术岗在线编程题(一)
  7. 联通大唐DTTV100线刷驱动固件及刷机经验教程
  8. linux网络测速工具,linux 测试网速的相关工具
  9. IOS下,利用捏合手势实现图像缩放和显示
  10. Android 集成腾讯播放器sdk(支持多格式,直播,m3u8等)重点是免费
  11. 简单融合双系统 苹果虚拟Win8实用技巧
  12. linux安装桌面xmanager,Linux安装图形界面和Vnc与Xmanager服务
  13. 大华摄像头使用外网进行访问管理
  14. 怎么绕过付费验证获取作文网站上的内容
  15. c/c++ signal(信号)解析
  16. android 来电显示号码,android监控来电显示
  17. AVR 定时器快速PWM模式使用
  18. 2021年电工(初级)考试内容及电工(初级)模拟考试题
  19. linux桌面版下载官网下载软件,Ubuntu桌面版 64位
  20. 怎样把手机搜索的计算机放到桌面上,手机便签记事本内容怎么发送到电脑桌面上?...

热门文章

  1. 心理测试:DISC性格测试(完整版)
  2. 90后程序员程广坤教你零基础自学编程,用这6种方法就够了!
  3. 基于JQUERY的WEB在线流程图设计器GOOFLOW 0.5版 数据值解析
  4. 上海富勒wms_【3PL | 宝时物流应用富勒WMS,提升现代化仓储管理水平 】
  5. 如何使用nodejs的镜像下载
  6. CAPL学习之路-DoIP相关函数
  7. 抽奖概率算法(区间计算法)
  8. android+实时ping工具,安卓ping测试工具
  9. 在Win2016上安装SVNServer21步骤
  10. 软考高项笔记 | 大数据