思路:二分找个位置,然后按循环节找就行。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
LL n ;
LL cal( LL a ){
return 1LL * a * ( a + 1 ) / 2 ;
}
char s[] = "1234567898765432" ;
int main(){
scanf("%lld",&n) ;
LL l = 0 , r = 10000000000 ;
while( l <= r ){
LL mid = ( l + r ) >> 1 ;
if( cal(mid) >= n ){
r = mid - 1 ;
}else l = mid + 1 ;
}
LL tmp = cal(l) ;
while( tmp >= n ){
l -- ;
tmp = cal(l) ;
}
n -= tmp ;
n -- ;
printf("%c\n",s[n%16]);
return 0 ;
}