fork(1) download
  1. #include<stdio.h>
  2. #include<string>
  3. #include<iostream>
  4. using namespace std;
  5. string Two[997];
  6. string Res[1000];
  7. void Add(int pos)
  8. {
  9.  
  10. string large=Two[pos-3],small=Res[pos-2];
  11. int max=large.length();
  12. int min=small.length();
  13. string s,res;
  14. int sum,carry=0;
  15. for(int i=max-1;i>=(max-min);i--)
  16. {
  17. sum=carry+large[i]-'0'+small[i-(max-min)]-'0';
  18. s[i]=sum%10+'0';
  19. carry=sum/10;
  20. }
  21. for(int i=max-min-1;i>=0;i--)
  22. {
  23. sum=carry+large[i]-'0';
  24. s[i]=sum%10+'0';
  25. carry=sum/10;
  26. }
  27. if(carry==1)
  28. res="1";
  29. for(int i=0;i<max;i++)
  30. res+=s[i];
  31. Res[pos]=res;
  32. return;
  33. }
  34. void Multiply(int pos)
  35. {
  36. string a=Two[pos-1];
  37. int m=a.length();
  38. string s,res;int c=0;
  39. int sum,carry=0;
  40. for(int i=m-1;i>=0;i--)
  41. {
  42. sum=(a[i]-'0')*2+carry;
  43. s[c]=sum%10+'0';
  44. carry=sum/10;
  45. c++;
  46. }
  47. while(carry!=0)
  48. {
  49. s[c]=carry%10+'0';
  50. carry/=10;
  51. c++;
  52. }
  53. for(int i=c-1;i>=0;i--)
  54. {
  55. res+=s[i];
  56. }
  57. Two[pos]=res;
  58. return;
  59. }
  60. int main()
  61. {
  62. Two[0]="1";
  63. Two[1]="2";
  64. for(int i=2;i<997;i++)
  65. Multiply(i);
  66. Res[1]="0";
  67. Res[2]="1";
  68. for(int i=3;i<1000;i++)
  69. Add(i);
  70. int num;
  71. while(scanf("%d",&num))
  72. {
  73. cout<<Res[num]<<endl;
  74. }
  75. }
Runtime error #stdin #stdout 0.02s 2952KB
stdin
999
stdout
Standard output is empty