Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
728
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <math.h>
  4. #include <set>
  5. #include <cstring>
  6. #include <stdio.h>
  7. #include <algorithm>
  8. using namespace std;
  9. void sum(vector <int> &a, vector <int> b);
  10. unsigned long long int pow3(int n)
  11. {
  12.     if (n == 0)
  13.         return 1;
  14.     unsigned long long int a = pow3(n/2);
  15.     if (n&1)
  16.         return 3*a*a;
  17.     return a*a;
  18. }
  19.  
  20. void print(vector <int> a)
  21. {
  22.     bool bol = 1;
  23.     for (int i = 0; i != 60; i++)
  24.     {
  25.         if (a[i] != 0)
  26.             bol = 0;
  27.         if (!bol)
  28.             printf("%d", a[i]);
  29.     }
  30.     return ;
  31. }
  32.  
  33. unsigned long long int poww(int n)
  34. {
  35.     if (n <= 0)
  36.         return 0;
  37.     return pow3(n-1)*2;
  38. }
  39.  
  40. void multiply(vector <int> &a)
  41. {
  42.     int p, peren = 0, i;
  43.     for (i = 59; i >= 0; i--)
  44.     {
  45.         p = (a[i]*2 + peren)/10;
  46.         a[i] = (a[i]*2+peren)%10;
  47.         peren = p;
  48.     }
  49.     return ;
  50. }
  51.  
  52. vector <int> all(int n)
  53. {
  54.     vector <int> a;
  55.     for (int i = 0; i != 59; i++)
  56.         a.push_back(0);
  57.     a.push_back(1);
  58.     for (int i = 0; i != n; i++)
  59.     {
  60.         multiply(a);
  61.     }
  62.     return a;
  63. }
  64.  
  65. vector <int> how(char *c, int len)
  66. {
  67.     vector <int> a;
  68.     for (int i = 0; i != 60; i++)
  69.         a.push_back(0);
  70.     if (len == 0)
  71.     {
  72.         a[59] = 1;
  73.         return a;
  74.     }
  75.     if (c[0] < '3')
  76.         return a;
  77.     if (c[0] >= '3')
  78.     {
  79.         if (c[0] == '3')
  80.             sum(a, how(c+1, len-1));
  81.         else
  82.             sum(a, all(len-1));
  83.     }
  84.     if (c[0] >= '7')
  85.     {
  86.         if (c[0] == '7')
  87.             sum(a, how(c+1, len-1));
  88.         else
  89.             sum(a, all(len-1));
  90.     }
  91.     return a;
  92. }
  93.  
  94. void sum(vector <int> &a, vector <int> b)
  95. {
  96.     int i, peren = 0, p;
  97.     for (i = 59; i >= 0; i--)
  98.     {
  99.         p = (a[i] + b[i] + peren)/10;
  100.         a[i] = (a[i] + b[i] + peren) % 10;
  101.         peren = p;
  102.     }
  103.     return ;
  104. }
  105.  
  106. int main()
  107. {
  108.     char c[61];
  109.     fgets(c, 61, stdin);
  110.     int len = strlen(c)-1;
  111.     vector <int> a;
  112.     for (int i = 0; i != 59; i++)
  113.         a.push_back(0);
  114.     a.push_back(1);
  115.     for (int i = 0; i != len; i++)
  116.     {
  117.         multiply(a);
  118.     }
  119.  
  120.     int p, peren = 2;
  121.     for (int i = 59; i >= 0 && peren; i--)
  122.     {
  123.         p = (a[i] - peren) < 0 ? 1 : 0;
  124.         a[i] = (a[i] - peren) < 0 ? 10 +(a[i] - peren) : a[i] - peren;
  125.         peren = p;
  126.     }
  127.  
  128.  
  129.     if (len == 0)
  130.     {
  131.         cout << "0";
  132.         return 0;
  133.     }
  134.     if (len == 1)
  135.     {
  136.         int v = 0;
  137.         if (c[0] >= '3')
  138.             v++;
  139.         if (c[0] >= '7')
  140.             v++;
  141.         printf("%d", v);
  142.         return 0;
  143.     }
  144.     if (c[0] >= '3')
  145.     {
  146.         if (c[0] == '3')
  147.             sum(a, how(c+1, len-1));
  148.         else
  149.             sum(a, all(len-1));
  150.     }
  151.     if (c[0] >= '7')
  152.     {
  153.         if (c[0] == '7')
  154.             sum(a, how(c+1, len-1));
  155.         else
  156.             sum(a, all(len-1));
  157.     }
  158.     print(a);
  159.     return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement