http://ac.jobdu.com/problem.php?id=1357
高中数学课上好像做过这个题
题目明确说了数据范围,所以用long long
没有什么好的办法吧,先确定一个大致的范围,然后再在这个范围的开始向后找,找到第一个就停下来,还在草稿纸上画了下二次函数的图像~~
1 #include <stdio.h>
2 #include <math.h>
3 long long calc(long long n)
4 {
5 long long s;
6 s=(long long)((sqrt(8*n)+1)*0.5);
7 for(;;s++){
8 if((long long)(s/2.0*(s-1))<=n&&(long long)(s/2.0*(s+1))>=n)
9 return s;
10 }
11 }
12 int main()
13 {
14 long long n;
15 while(scanf("%lld",&n)!=EOF){
16 printf("%lld\n",calc(n));
17 }
18 return 0;
19 }