昨天做过一样的题:
平方和公式:n*(n+1)*(2n+1)
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int a[150],num;
int b[150];
int _S()
{
char c=getchar();int s=0;
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}
return s;
}
void _db()
{
for(int i=1;i<=141;i++)
a[i]=(i+1)*i/2;
for(int i=1;i<=141;i++)
b[i]=i*(i+1)*(2*i+1)/6;
return ;
}
void _get(int v)
{
int tmp,ans;
for(int i=1;i<=141;i++)
if(a[i]<=v) tmp=i;//当然也可以用二分查找或者lower_bound
ans=b[tmp];
ans+=(v-a[tmp])*(tmp+1);
printf("%d %d\n",v,ans);
return ;
}
int main()
{
_db();
int T,n,x;
T=_S();
while(T--){
while(true){
x=_S();
if(x==0) break;
_get(x);
}
if(T) printf("\n");
}
return 0;
}