是佳佳呀 发表于 2021-1-17 11:51:25

c语言怎么实现分数与分数相加


1/1 + 1/2 + 1/3 + 1/4 + ... 在数学上称为调和级数。

它是发散的,也就是说,只要加上足够多的项,就可以得到任意大的数字。

但是,它发散的很慢:

前1项和达到 1.0
前4项和才超过 2.0
前83项的和才超过 5.0

那么,请你计算一下,要加多少项,才能使得和达到或超过 15.0 呢?

请填写这个整数。

注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。

风过无痕1989 发表于 2021-1-17 12:20:26

本帖最后由 风过无痕1989 于 2021-1-17 12:23 编辑

1835421 项之和大于等于15.0
#include<stdio.h>
int main()
{
        int i;
        double sum = 0;
        for (i = 1;i < 10000000;i++)
        {
                sum += 1.0 / i;
                if (sum >= 15.0)
                {
                        break;
                }
        }
        printf("%d\n", i);
}

烂泥化刚 发表于 2021-1-17 12:30:08

本帖最后由 烂泥化刚 于 2021-1-17 12:54 编辑

#include <stdio.h>

int main()
{
        double sum = 0;
        int i = 1;
        for(; sum < 15.0; i++)
        {
                sum += 1.0 / i;
        }
       
        return i;
}

烂泥化刚 发表于 2021-1-17 12:54:54

1835422

风过无痕1989 发表于 2021-1-17 14:42:07

烂泥化刚 发表于 2021-1-17 12:54
1835422

你再算算,1835422,它的值等于 15.000001

烂泥化刚 发表于 2021-1-17 17:01:54

风过无痕1989 发表于 2021-1-17 14:42
你再算算,1835422,它的值等于 15.000001

我懂了,
我的for语句在最后又将i自增了一次对吧

风过无痕1989 发表于 2021-1-17 19:52:51

烂泥化刚 发表于 2021-1-17 17:01
我懂了,
我的for语句在最后又将i自增了一次对吧

是的,虽然最后自增那一次,已经不再累加了,但自增加的 i 却实实在在地加 1了。我的做法是先设置一个很大的次数,达到条件后,就直接中断循环,所以,i 就反映了实际运算次数

烂泥化刚 发表于 2021-1-17 23:43:29

风过无痕1989 发表于 2021-1-17 19:52
是的,虽然最后自增那一次,已经不再累加了,但自增加的 i 却实实在在地加 1了。我的做法是先设置一个很 ...

多谢大佬传授的经验
页: [1]
查看完整版本: c语言怎么实现分数与分数相加