找到要求的位置在第几个斜线上,再分奇偶两种情况处理。需要注意的是,当n恰好为第k斜线末尾的那个位置时特殊处理一下就好了
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b,k,n;
while(cin>>n)
{
printf("TERM %lld IS ",n);
for(k=1; k*(k+1)<=2*n; ++k);
--k;
n-=(k*(k+1)/2);
if(k&1)
{
a=1;
b=n?k+1:k;
for(int i=2; i<=n; ++i) ++a,--b;
}
else
{
a=n?k+1:k,b=1;
for(int i=2; i<=n; ++i)--a,++b;
}
printf("%lld/%lld\n",a,b);
}
return 0;
}