Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:BlessAladdin,实在不好意思,我有点问题想请教一下的。又引起我的怀疑的。。。。。In Reply To:Re:BlessAladdin,实在不好意思,我有点问题想请教一下的。又引起我的怀疑的。。。。。 Posted by:HW at 2005-08-01 03:34:47 > > AC: > ---------------------------------------- > #include <stdio.h> > #include <string.h> > #include <math.h> > #define maxn 100 > #define maxSave 20 > #define maxSave1 11 > > unsigned long long save[maxn][2]; > unsigned long long save1[maxn][2]; > > int check(double t,int k){ > char ch[200]; > sprintf(ch,"%.0lf",t); > return ch[k]-'0'; > } > > void buildSave(){ > unsigned long long k=1; > unsigned long long i; > > for (i=10;k<maxSave;i*=10){ > save[k][0]=(unsigned long long)sqrtl((long double)(i-1)); > save[k][1]=(save[k][0]-save[k-1][0])*k+save[k-1][1]; > k++; > } > > k=1; > save1[0][0]=save1[0][1]=0; > for (i=10;k<maxSave1;i*=10){ > save1[k][1]=save1[k-1][1]+(i-(i/10))*k; > save1[k][0]=i-1; > k++; > } > } > > int findSave(unsigned long long k){ > unsigned long long i,t,u; > double tem; > for (i=0;;i++) > if (k<=save[i+1][1]){t=i+1; break;} > u=(k-save[t-1][1]+(t-1))%t; > k=(k-save[t-1][1]+(t-1))/t; > k=k+save[t-1][0]; > tem=(double)k; > tem*=tem; > return check(tem,u); > } > > int findSave1(unsigned long long k){ > unsigned long long i,t,u; > for (i=0;;i++) > if (k<=save1[i+1][1]){t=i+1; break;} > u=(k-save1[t-1][1]+(t-1))%t; > k=(k-save1[t-1][1]+(t-1))/t+save1[t-1][0]; > return check(k,u); > } > > int main(){ > unsigned long long t,i; > int s[1000],s1[1000],k; > buildSave(); > while (scanf("%lld",&t) && t>0){ > k=0; > s[k]=findSave(t); > s1[k]=findSave1(t); > k++; > > for (i=t+1;;i++){ > s[k]=findSave(i); > s1[k]=findSave1(i); > if (s[k]+s1[k]<9 || s[k]+s1[k++]>=10) break; > } > > for (i=k-1;i>=1;i--) > s[i-1]=(s[i]+s1[i])/10+s[i-1]; > printf("%d\n",(s[0]+s1[0])%10); > } > return 0; > } > -------------------------------------------------------- > > WA: > -------------------------------------------------------- > #include <stdio.h> > #include <string.h> > #include <math.h> > #define maxn 100 > #define maxSave 20 > #define maxSave1 11 > > unsigned long long save[maxn][2]; > unsigned long long save1[maxn][2]; > > int check(unsigned long long t,int k){ ~~~~~~~~~~~~~~~~~~~~ > char ch[200]; > sprintf(ch,"%lld",t); ~~~~~~~ > return ch[k]-'0'; > } > > void buildSave(){ > unsigned long long k=1; > unsigned long long i; > > for (i=10;k<maxSave;i*=10){ > save[k][0]=(unsigned long long)sqrtl((long double)(i-1)); > save[k][1]=(save[k][0]-save[k-1][0])*k+save[k-1][1]; > k++; > } > > k=1; > save1[0][0]=save1[0][1]=0; > for (i=10;k<maxSave1;i*=10){ > save1[k][1]=save1[k-1][1]+(i-(i/10))*k; > save1[k][0]=i-1; > k++; > } > } > > int findSave(unsigned long long k){ > unsigned long long i,t,u; > for (i=0;;i++) > if (k<=save[i+1][1]){t=i+1; break;} > u=(k-save[t-1][1]+(t-1))%t; > k=(k-save[t-1][1]+(t-1))/t; > k=k+save[t-1][0]; > return check(k*k,u); ~~~~ > } > > int findSave1(unsigned long long k){ > unsigned long long i,t,u; > for (i=0;;i++) > if (k<=save1[i+1][1]){t=i+1; break;} > u=(k-save1[t-1][1]+(t-1))%t; > k=(k-save1[t-1][1]+(t-1))/t+save1[t-1][0]; > return check(k,u); > } > > int main(){ > unsigned long long t,i; > int s[1000],s1[1000],k; > buildSave(); > while (scanf("%lld",&t) && t>0){ > k=0; > s[k]=findSave(t); > s1[k]=findSave1(t); > k++; > > for (i=t+1;;i++){ > s[k]=findSave(i); > s1[k]=findSave1(i); > if (s[k]+s1[k]<9 || s[k]+s1[k++]>=10) break; > } > > for (i=k-1;i>=1;i--) > s[i-1]=(s[i]+s1[i])/10+s[i-1]; > printf("%d\n",(s[0]+s1[0])%10); > } > return 0; > } > -------------------------------------------------------- Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator