Advertisement
desdemona

że niby 2/3 do wywalenia

Oct 25th, 2015
525
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <gmpxx.h>
  4. #include <iomanip>
  5. #include <string>
  6. #include <vector>
  7. #include <sstream>
  8.  
  9. using namespace std;
  10. int d,n = 0,p = 1;
  11.  
  12. string fixed(mpf_class x)
  13. {
  14.     ostringstream ss;
  15.     ss << fixed << setprecision(d) << x;
  16.     string str = ss.str();
  17.     str = str.substr(0, str.find_last_not_of('0') + 1);
  18.     if(str[str.length()-1] == '.')
  19.         return str.substr(0, str.length()-1);
  20.     else
  21.         return str;
  22. }
  23.  
  24. int main(int argc, char **argv)
  25. {
  26.     if(argc > 1)
  27.     {
  28.         d = atoi(argv[1]);
  29.     }
  30.     d++;
  31.     string num;
  32.     mpz_t x, sum, sum2, count;
  33.     mpz_init(x);
  34.     mpz_init(sum);
  35.     mpz_init(sum2);
  36.     mpf_class xn = 0;
  37.     vector<double> v;
  38.     while(cin >> num)
  39.     {
  40.         xn = num;
  41.         int zeros = d;
  42.         for(int i = 0; i < num.size(); i++)
  43.         {
  44.             if(num[i] == '.')
  45.             {
  46.                 if(i < num.size() - d)
  47.                 {
  48.                     if(num[i+d] == '5' || num[i+d] == '6' || num[i+d] == '7' || num[i+d] == '8' || num[i+d] == '9')
  49.                     {
  50.                         num[i+d-1]++;
  51.                     }
  52.                     num[i+d] = '0';
  53.                     num = num.substr(0, i+d+1);
  54.                     zeros = 0;
  55.                     num = num.substr(0, i) + num.substr(i + 1, num.size());
  56.                     break;
  57.                 }
  58.                 else
  59.                 {
  60.                     zeros -= num.size() - i - 1;
  61.                     num = num.substr(0, i) + num.substr(i + 1, num.size());
  62.                     break;
  63.                 }
  64.             }
  65.             /*if(num[i] == '.')
  66.             {
  67.                 zeros -= num.size() - i - 1;
  68.                 num = num.substr(0, i) + num.substr(i + 1, num.size());
  69.                 break;
  70.             }*/
  71.         }
  72.         for(int i = 0; i < zeros; i++)
  73.         {
  74.             num += '0';
  75.         }
  76.         mpz_set_str (x, num.c_str(), 10);
  77.         mpz_add(sum, sum, x);
  78.         mpz_mul(x, x, x);
  79.         mpz_add(sum2, sum2, x);
  80.         v.push_back((double)xn.get_d());
  81.         n++;       
  82.     }
  83.     mpz_init_set_si (count, n);
  84.     mpz_tdiv_q(sum, sum, count);
  85.     mpz_tdiv_q(sum2, sum2, count);
  86.     mpz_mul(x, sum, sum);
  87.     mpz_sub(sum2, sum2, x);
  88.     char* chars = NULL;
  89.     chars = mpz_get_str(chars, 10, sum2);
  90.     string temp(chars);
  91.     if(temp.size() > d)
  92.     {
  93.         temp = temp.substr(0, temp.size()-d);
  94.         mpz_set_str (sum2, temp.c_str(), 10);
  95.     }
  96.     else
  97.         mpz_set_si(sum2, 0);
  98.  
  99.     mpz_t pie;
  100.     mpz_init_set_str (pie, "100000", 10);
  101.     mpz_add(pie, pie, pie);
  102.     char* sumChars = NULL;
  103.     sumChars = mpz_get_str(sumChars, 10, sum);
  104.     string sumStr(sumChars);
  105.     if(sumStr.size() < d + 1)
  106.     {
  107.         string tmp = "";
  108.         for(int i=0; i < d+1 - sumStr.size(); i++)
  109.         {
  110.             tmp += "0";
  111.         }
  112.         sumStr = tmp + sumStr;
  113.     }
  114.     sumStr = sumStr.substr(0, sumStr.size() - d) + "." + sumStr.substr(sumStr.size() - d, sumStr.size());
  115.     if(sumStr[sumStr.size()-1] == '5' || sumStr[sumStr.size()-1] == '6' || sumStr[sumStr.size()-1] == '7' || sumStr[sumStr.size()-1] == '8' || sumStr[sumStr.size()-1] == '9')
  116.     {
  117.         sumStr[sumStr.size()-2]++;
  118.     }
  119.     sumStr = sumStr.substr(0, sumStr.size()-1);
  120.     sumStr = sumStr.substr(0, sumStr.find_last_not_of('0') + 1);
  121.     if(sumStr[sumStr.length()-1] == '.')
  122.         sumStr = sumStr.substr(0, sumStr.length()-1);
  123.     cout << sumStr << endl;
  124.  
  125.     char* sum2Chars = NULL;
  126.     sum2Chars = mpz_get_str(sum2Chars, 10, sum2);
  127.     string sum2Str(sum2Chars);
  128.     if(sum2Str.size() < d + 1)
  129.     {
  130.         string tmp = "";
  131.         for(int i=0; i < d+1 - sum2Str.size(); i++)
  132.         {
  133.             tmp += "0";
  134.         }
  135.         sum2Str = tmp + sum2Str;
  136.     }
  137.     sum2Str = sum2Str.substr(0, sum2Str.size() - d) + "." + sum2Str.substr(sum2Str.size() - d, sum2Str.size());
  138.     if(sum2Str[sum2Str.size()-1] == '5' || sum2Str[sum2Str.size()-1] == '6' || sum2Str[sum2Str.size()-1] == '7' || sum2Str[sum2Str.size()-1] == '8' || sum2Str[sum2Str.size()-1] == '9')
  139.     {
  140.         sum2Str[sum2Str.size()-2]++;
  141.     }
  142.     sum2Str = sum2Str.substr(0, sum2Str.size()-1);
  143.     sum2Str = sum2Str.substr(0, sum2Str.find_last_not_of('0') + 1);
  144.     if(sum2Str[sum2Str.length()-1] == '.')
  145.         sum2Str = sum2Str.substr(0, sum2Str.length()-1);
  146.     cout << sum2Str << endl;
  147.  
  148.         p = n;
  149.     for(int i = 1; i < v.size(); i++)
  150.     {
  151.         bool success = true;
  152.         int initial = i;
  153.         for(int j = 0; i < v.size() && j < initial; j++, i++)
  154.         {
  155.             if(v[j] != v[i])
  156.             {
  157.                 success = false;
  158.                 break;
  159.             }
  160.         }
  161.         if(success)
  162.         {
  163.             for(int j = 0; i < v.size(); i++, j++)
  164.             {
  165.                 if(v[i] != v[j%initial])
  166.                 {
  167.                     success = false;
  168.                     break;
  169.                 }
  170.             }
  171.         }
  172.         if(success)
  173.         {
  174.             p = initial;
  175.             break;
  176.         }
  177.         i = initial;
  178.     }
  179.     cout << p << endl;
  180.     return 0;
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement