背景
金堂人杰地灵,金玉满堂!金堂中学就是这金玉满堂之中一颗璀璨的明珠!黑皮就在金堂最有名的金堂中学求学....
描述
一天他不务正业出去耍,看见街上的地板是由很多小的正方形组成,顿时心里突发奇想想要总结一下到底有多少正方形。。。。
于是乎,他狠下心数了数,终于翻山越岭知道了正方形的总边长为N,你的目的是找出在可以组成的每个至少边为1的正方形的个数。(因为黑皮太笨了,无法找到)。。
格式
输入格式
自然数(0<=n<=32767)
输出格式
一个数,即正方形的总数
样例1
样例输入1
2
样例输出1
5
限制
各个测试点1s
提示
本题太简单了,na上来个大家,解解烦~~~~
《呵呵》
1 /* 2 规律不难找 就是a[i]=a[i-1]+i*i 3 就是 n有点大 long long只过两个点 4 只好打高精了 5 */ 6 #include<cstdio> 7 #include<cstring> 8 #include<iostream> 9 #define ll long long 10 #define MAXN 1010 11 12 using namespace std; 13 14 int n; 15 int a[MAXN],b[MAXN],c[MAXN]; 16 17 inline void cc(ll p) { 18 memset(b,0,sizeof b); 19 while(p) { 20 int t=p/10; 21 b[++b[0]]=p-t*10; 22 p/=10; 23 } 24 return; 25 } 26 27 inline void pluss() { 28 c[0]=max(b[0],a[0])+1; 29 for(int i=1;i<=c[0];i++) { 30 c[i]+=a[i]+b[i]; 31 if(c[i]>=10) { 32 c[i+1]+=c[i]/10; 33 c[i]%=10; 34 } 35 } 36 while(c[0]>0&&!c[c[0]]) c[0]--; 37 for(int i=0;i<=c[0];i++) a[i]=c[i]; 38 memset(c,0,sizeof c); 39 } 40 41 int main() { 42 scanf("%d",&n); 43 a[0]=1; 44 a[1]=1; 45 for(int i=2;i<=n;i++) { 46 cc(i*i); 47 pluss(); 48 } 49 for(int i=a[0];i>=1;i--) printf("%d",a[i]); 50 printf(" "); 51 return 0; 52 }