1 条题解
-
0
C++ :
#include<stdio.h> #include<math.h> #include<string.h> int a[501],t[501],n[501]; void suanfa(int p) { int i,j,q; memset(a,0,sizeof(a)); memset(t,0,sizeof(t)); memset(n,0,sizeof(n)); t[500]=1,a[500]=2; if(p!=1) { while(p) { if(p&1) { memset(n,0,sizeof(n)); for(i=500;i>=1;i--) { for(j=500,q=i;j>=1;j--,q--) { if(q==0) break; n[q]=n[q]+t[i]*a[j]; } } for(i=500;i>=1;i--) { if(n[i]>=10) { n[i-1]=n[i]/10+n[i-1]; n[i]=n[i]%10; } } for(i=500;i>=1;i--) t[i]=n[i]; } memset(n,0,sizeof(n)); for(i=500;i>=1;i--) { for(j=500,q=i;j>=1;j--,q--) { if(q==0) break; n[q]=n[q]+a[i]*a[j]; } } for(i=500;i>=1;i--) { if(n[i]>=10) { n[i-1]=n[i]/10+n[i-1]; n[i]=n[i]%10; } } for(i=500;i>=1;i--) a[i]=n[i]; p>>=1; } } t[500]--; for(i=1;i<=500;i++) { printf("%d",t[i]); if(i%50==0) puts(""); } } int main() { int p; scanf("%d",&p); printf("%d\n",int(p*log10(2)+1)); suanfa(p); return 0; }
Pascal :
var n,i:longint;s:array[1..1000]of longint;o:array[1..500]of longint; procedure sl(n:longint); var i,j:longint; begin if n=0 then exit; sl(n div 2); for i:=1 to 500 do for j:=1 to 500 do if n mod 2=0 then s[i+j-1]:=s[i+j-1]+o[i]*o[j] else s[i+j-1]:=s[i+j-1]+o[i]*o[j]*2; for i:=1 to 500 do begin o[i]:=s[i] mod 10; s[i+1]:=s[i+1]+s[i] div 10; end; fillchar(s,sizeof(s),0); end; begin read(n); writeln(trunc(ln(2)/ln(10)*n)+1); o[1]:=1; sl(n); for i:=500 downto 2 do begin write(o[i]); if i mod 50=1 then writeln; end; writeln(o[1]-1); end.
- 1
信息
- ID
- 225
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者