怎样用c语言编写一段程序实现c语言1~100奇数和偶数之和呢?

》》点赞,收藏+关注,理财&技术不迷路《《

这段代码之所以“效率比较低”是因为每次循环都需要调用一次 len() 函数(我们还没有学到函数的概念,小甲鱼这里为零基础的朋友形象的解释下:就像你打游戏打得正HIGH的时候,老妈让你去买盐......你有两种选择,一次买一包,一天去买五次,或者一次性买五包回来,老妈要就直接给她。)

1. 编写一个程序,求 100~999 之间的所有水仙花数。

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数

有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。

# 注意,下边不是字符串拼接,因此不用“+”哦~

注释:range(2, 7)是产生[2, 3, 4, 5, 6]5个数,绿球不能是1个,因为如果绿球是1个的话,红球 + 黄球需要有7个才能符合题意,而红球和黄球每种只有3个,因此是range(2, 7)

}
  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址

  了解了浮点数的存储以及手算平方根的原理,我们可以考虑程序实现了。

  先实现一个64位整数的平方根,根据之前的手算平方根,程序也不是那么难写了。

//0的平方根是0,特殊处理一下
//找到最高位的1,并且产生平方根结果最高位的1
//根据手算平方根的原理,依次产生各位结果
//右移动两位,并把a接着的两位并入remain

  其实,可以合在一起写,代码会短一些,但效率会低那么一点点,而且编译器应该不太容易优化。

  不过,我们不需要这个结果。

  为了验证其正确性,我们来写个C语言的main

  我们shell程序测试一下,我们当然不可能测试过每一个64bits的数,这个运算量太大,不现实。我们可以用随机取一部分来测试。

#随机产生bits ~,如果是0,代表测试的数就是0
#如果不是0,则代表要产生的数二进制可以有多少位
#产生一个bits位的二进制数x
#用bc将x转换成十进制
#用bc计算x的平方根取整,理论上和我们的C语言计算一致
#z是我们的C语言计算结果
#比较,如果不一致,就报错

  测试结果表明,我们的C语言还是可以得到正确的结果的。

  再来回忆下第一节里讲过的浮点数结构,

  所以此处要用a或者2*a来开平方根,

  回忆一下浮点数的结构,单精度浮点数的精度是23位。

  表示的是科学计数法a*2的a减去1的部分,那么加上整数1可以用二进制24位表示。

  于是,我们就想,一个二进制48位或47位长的数,平方根是二进制24位。那么,我们就可以用一个48位或47位的二进制整数的平方根计算结果的小数部分。

  -0.0的平方根是-0.0(可能只是某些库里是这样的),

  以上都可以在计算的时候特殊化一下。

  规格数(就是用科学计数法表示的浮点数)的平方根也是规格数,

  我们稍微计算一下,可以明白,所有的此类数的平方根都在规格数表示的范围内。

  于是,有了以下的代码。

//之前整数平方根被直接优化,我们只需要求47位或者48位整数的平方根
//然后需要移位,要区分奇数和偶数

  同样,也写个测试用的程序,对inf/-inf/nan/0.0/-0.0以及负数不测了,这些很简单。

  结果发现,我们的程序和数学库里的sqrtf结果有细微差别。

  于是,我们决定再加个小东西,就是四舍五入。之前我们用的是47位或者48位数开平方,为了四舍五入,我们需要多一位,于是就用49位或者50位数开平方。

  修改一下mysqrtf,增加两位拿去开平方,_sqrt_也动一下。

//之前整数平方根被直接优化,我们只需要求49位或者50位整数的平方根
//然后需要移位,要区分奇数和偶数

  然后再测,准确无误。于是我们可以完工了。

}

我要回帖

更多关于 c语言1~100奇数和偶数之和 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信