题目解答:显然,这是一道数学题。先考虑特殊情况,n<=m时,显然为第n天。当n>m时,经过计算可得,答案为ans = ceil((sqrt(8 * (n - m) + 1) - 1) / 2);
但是直接计算会有精度误差。所以我的解决办法是先将计算出来的结果减去100,再用一个whlie循环一个一个的加,并判断当前结果是否满足原始的算式。(微调结果))
PS: long double 好像不能用printf输出,还是用cout吧!
PPS:判断一个double变量是否为nan的方法:if(f != f) 。。。(nan默认的所有等于运算均为不等,所以可以通过与自身比较判断是否为nan)
代码如下;
#include <cstdio>
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
long double n,m;
cin >> n >> m;
if(n <= m) {cout << setprecision(0) << fixed << n << endl;return 0;
long double ans = ceil((sqrt(8 * (n - m) + 1) - 1) / 2);
if(ans > 100) ans-=100;
while(ans * (ans + 1) < 2 * (n - m)) ans++;
ans += m;
cout << setprecision(0) << fixed << ans << endl;
return 0;
}