Advertisement
ismaeil

B. Arithmetic Exercise

Aug 5th, 2022
722
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using ii  = pair<int , int>;
  5. using iii = pair<int , ii>;
  6. using vi  = vector< int >;
  7. using vii = vector< ii >;
  8. using ll  = long long;
  9. using vl  = vector< ll >;
  10. using pll = pair<ll , ll>;
  11. using vll = vector< pll >;
  12. using plll= pair<ll , pll>;
  13.  
  14. #define FastIO cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
  15. #define LSOne(a) ( (a) & -(a) )
  16. #define INF  ll(4e18)
  17. #define OO   int(1e9)
  18. #define EPS      1e-9
  19. #define PB  push_back
  20. #define S      second
  21. #define F       first
  22.  
  23. const int N = 2e5 + 5e1;
  24. const ll MOD = 1e9 + 7;
  25. char buff[N];
  26.  
  27. ll _pow(ll n ,ll p)
  28. {
  29.     ll x = 1;
  30.     while( p > 0 )
  31.     {
  32.         if( p & 1 ) x = (x * n);
  33.         n = (n * n);
  34.         p >>= 1;
  35.     }
  36.  
  37.     return x;
  38. }
  39.  
  40. int main()
  41. {
  42.     ll a ,b ,k;
  43.     scanf("%lld%lld%lld" ,&a ,&b ,&k);
  44.  
  45.     auto bits = [&](ll x) -> ll {
  46.         ll cnt = 0;
  47.         while( x ) x /= 10 ,cnt ++;
  48.         return cnt;
  49.     };
  50.  
  51.     if( a == b )
  52.     {
  53.         printf("1.");
  54.         while( k-- ) printf("0");
  55.         return 0;
  56.     }
  57.  
  58.     printf("0.");
  59.     a *= 10;
  60.  
  61.     vl ans;
  62.     while( k )
  63.     {
  64.         ll n = bits(a);
  65.         bool flag = false;
  66.         for(ll i = n - 1 ; i >= 0 ; i--)
  67.         {
  68.             ll a1 = a / _pow(10ll ,i);
  69.  
  70.             if( a1 >= b )
  71.             {
  72.                 flag = true;
  73.                 ll c = a1 / b;
  74.                 ll d = c * b;
  75.                 k -= 1;
  76.                 ans.PB(c);
  77.                 a -= d;
  78.                 break;
  79.             }
  80.         }
  81.  
  82.         if( !flag )
  83.         {
  84.             a *= 10;
  85.             if( a < b )
  86.             {
  87.                 k -= 1;
  88.                 ans.PB(0);
  89.             }
  90.         }
  91.     }
  92.  
  93.     int m = (int)ans.size();
  94.     while( (int)ans.size() != m + 1 )
  95.     {
  96.         ll n = bits(a);
  97.         bool flag = false;
  98.         for(ll i = n - 1 ; i >= 0 ; i--)
  99.         {
  100.             ll a1 = a / _pow(10ll ,i);
  101.  
  102.             if( a1 >= b )
  103.             {
  104.                 flag = true;
  105.                 ll c = a1 / b;
  106.                 ll d = c * b;
  107.                 k -= 1;
  108.                 ans.PB(c);
  109.                 a -= d;
  110.                 break;
  111.             }
  112.         }
  113.  
  114.         if( !flag )
  115.         {
  116.             a *= 10;
  117.             if( a < b )
  118.             {
  119.                 k -= 1;
  120.                 ans.PB(0);
  121.             }
  122.         }
  123.     }
  124.  
  125.     if( ans.back() >= 5 )
  126.     {
  127.         for(int i = (int)ans.size() - 2 ; i >= 0 ; i--)
  128.         {
  129.             if( ans[i] == 9 ){
  130.                 ans[i] = 0;
  131.             } else {
  132.                 ans[i] += 1;
  133.                 break;
  134.             }
  135.         }
  136.     }
  137.  
  138.     for(int i = 0 ; i < (int)ans.size() - 1 ; i++){
  139.         printf("%lld" ,ans[i]);
  140.     }
  141.     puts("");
  142.     return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement