MAX根据题目 n(n+1)/2 = INT_MAX 估计出来的
#include<iostream>
#include<cmath>
#include<limits.h>
#include<string.h>
#include<algorithm>
#define MAX 66000
using namespace std;
int k, n;
int g, t;
long long a[MAX+1];
int main()
{
// freopen("out.txt","w",stdout);
memset(a,INT_MAX,sizeof(a));
a[0] = 0;
for(int i = 1; i <= MAX; ++i){
a[i] = a[i-1] + i;
}
scanf("%d",&k);
while(k--){
scanf("%d",&n);;
g =lower_bound(a+1,a+MAX,n)-a;
t = n - a[g-1];
if(t%9 == 0)//注意 对9取余的情况
printf("%d\n",9);
else
printf("%d\n",t%9);
}
return 0;
}
直接查找会超时TLE:
scanf("%d",&k);
while(k--){
int i;
scanf("%d",&n);
for(i = 1; i <= sqrt(INT_MAX)+1; ++i){
if((1+i)*i/2 >= n){
break;
}
}
int t = n - i*(i-1)/2;
if(t%9 == 0)
printf("%d\n",9);
else
printf("%d\n",t%9);
}