Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- #include <gmpxx.h>
- #include <iomanip>
- #include <string>
- #include <vector>
- #include <sstream>
- using namespace std;
- int d,n = 0,p = 1;
- string fixed(mpf_class x)
- {
- ostringstream ss;
- ss << fixed << setprecision(d) << x;
- string str = ss.str();
- str = str.substr(0, str.find_last_not_of('0') + 1);
- if(str[str.length()-1] == '.')
- return str.substr(0, str.length()-1);
- else
- return str;
- }
- int main(int argc, char **argv)
- {
- if(argc > 1)
- {
- d = atoi(argv[1]);
- }
- d++;
- string num;
- mpz_t x, sum, sum2, count;
- mpz_init(x);
- mpz_init(sum);
- mpz_init(sum2);
- mpf_class xn = 0;
- vector<double> v;
- while(cin >> num)
- {
- xn = num;
- int zeros = d;
- for(int i = 0; i < num.size(); i++)
- {
- if(num[i] == '.')
- {
- if(i < num.size() - d)
- {
- if(num[i+d] == '5' || num[i+d] == '6' || num[i+d] == '7' || num[i+d] == '8' || num[i+d] == '9')
- {
- num[i+d-1]++;
- }
- num[i+d] = '0';
- num = num.substr(0, i+d+1);
- zeros = 0;
- num = num.substr(0, i) + num.substr(i + 1, num.size());
- break;
- }
- else
- {
- zeros -= num.size() - i - 1;
- num = num.substr(0, i) + num.substr(i + 1, num.size());
- break;
- }
- }
- /*if(num[i] == '.')
- {
- zeros -= num.size() - i - 1;
- num = num.substr(0, i) + num.substr(i + 1, num.size());
- break;
- }*/
- }
- for(int i = 0; i < zeros; i++)
- {
- num += '0';
- }
- mpz_set_str (x, num.c_str(), 10);
- mpz_add(sum, sum, x);
- mpz_mul(x, x, x);
- mpz_add(sum2, sum2, x);
- v.push_back((double)xn.get_d());
- n++;
- }
- mpz_init_set_si (count, n);
- mpz_tdiv_q(sum, sum, count);
- mpz_tdiv_q(sum2, sum2, count);
- mpz_mul(x, sum, sum);
- mpz_sub(sum2, sum2, x);
- char* chars = NULL;
- chars = mpz_get_str(chars, 10, sum2);
- string temp(chars);
- if(temp.size() > d)
- {
- temp = temp.substr(0, temp.size()-d);
- mpz_set_str (sum2, temp.c_str(), 10);
- }
- else
- mpz_set_si(sum2, 0);
- mpz_t pie;
- mpz_init_set_str (pie, "100000", 10);
- mpz_add(pie, pie, pie);
- char* sumChars = NULL;
- sumChars = mpz_get_str(sumChars, 10, sum);
- string sumStr(sumChars);
- if(sumStr.size() < d + 1)
- {
- string tmp = "";
- for(int i=0; i < d+1 - sumStr.size(); i++)
- {
- tmp += "0";
- }
- sumStr = tmp + sumStr;
- }
- sumStr = sumStr.substr(0, sumStr.size() - d) + "." + sumStr.substr(sumStr.size() - d, sumStr.size());
- 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')
- {
- sumStr[sumStr.size()-2]++;
- }
- sumStr = sumStr.substr(0, sumStr.size()-1);
- sumStr = sumStr.substr(0, sumStr.find_last_not_of('0') + 1);
- if(sumStr[sumStr.length()-1] == '.')
- sumStr = sumStr.substr(0, sumStr.length()-1);
- cout << sumStr << endl;
- char* sum2Chars = NULL;
- sum2Chars = mpz_get_str(sum2Chars, 10, sum2);
- string sum2Str(sum2Chars);
- if(sum2Str.size() < d + 1)
- {
- string tmp = "";
- for(int i=0; i < d+1 - sum2Str.size(); i++)
- {
- tmp += "0";
- }
- sum2Str = tmp + sum2Str;
- }
- sum2Str = sum2Str.substr(0, sum2Str.size() - d) + "." + sum2Str.substr(sum2Str.size() - d, sum2Str.size());
- 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')
- {
- sum2Str[sum2Str.size()-2]++;
- }
- sum2Str = sum2Str.substr(0, sum2Str.size()-1);
- sum2Str = sum2Str.substr(0, sum2Str.find_last_not_of('0') + 1);
- if(sum2Str[sum2Str.length()-1] == '.')
- sum2Str = sum2Str.substr(0, sum2Str.length()-1);
- cout << sum2Str << endl;
- p = n;
- for(int i = 1; i < v.size(); i++)
- {
- bool success = true;
- int initial = i;
- for(int j = 0; i < v.size() && j < initial; j++, i++)
- {
- if(v[j] != v[i])
- {
- success = false;
- break;
- }
- }
- if(success)
- {
- for(int j = 0; i < v.size(); i++, j++)
- {
- if(v[i] != v[j%initial])
- {
- success = false;
- break;
- }
- }
- }
- if(success)
- {
- p = initial;
- break;
- }
- i = initial;
- }
- cout << p << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement