高中数学课上好像做过这个题
题目明确说了数据范围,所以用long long
没有什么好的办法吧,先确定一个大致的范围,然后再在这个范围的开始向后找,找到第一个就停下来,还在草稿纸上画了下二次函数的图像~~
1 #include2 #include 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 }