Code[vs]3064 求和(模拟)

3064 求和

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 青铜 Bronze
题目描述 Description

输入一个数xx <= 10000),求数n使的S= 1+1/2+1/3+…+1/n>=x的最小n值。但如果在n > 5000000时都无法满足,则输出“Error”(没有引号)

输入描述 Input Description

只有一个数x

输出描述 Output Description

如果数n使的S= 1+1/2+1/3+…+1/n>=x的最小n值小于5000000,则输出一个数n

否则输出Error”(没有引号)

样例输入 Sample Input

输入样例1

10

输入样例2

1000

样例输出 Sample Output

输出样例1

12367

 

输出样例2

Error



解题思路:

很水的模拟题,只要按照题目中说的要求去写就好了,慢慢来,for( i = 1;;i++ )这个技巧要学会,但是什么时候结束这个for循环呢,这就要看你怎么调整你的姿势了。。。

QAQ,按照我的来就好了,两种情况下会打破for循环。。。

1. i > 500000。

2.找到了最小的n。

好了,看代码吧。


代码:

# include<cstdio>
# include<iostream>

using namespace std;

const double eps = 1e-8;

int main(void)
{
    int x;
    while ( cin>>x )
    {
        int flag = 0;
        int n;
        double sum = 0;
        for ( int i = 1;;i++ )
        {
            sum+=(1.0/i);
            if ( i > 5000000 )
            {
                if ( sum-x < eps )
                {
                    flag = 1;
                    break;
                }
            }
            if ( sum >= x )
            {
                n = i;
                break;
            }
        }

        if ( flag )
        {
            cout<<"Error!"<<endl;
        }
        else
        {
            cout<<n<<endl;
        }

    }


    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值