Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- /*
- По заданному натуральному числу А требуется найти наибольшее число В такое, что B2 <= A.
- Входные данные
- Во входном файле INPUT.TXT записано натуральное число A (A <= 103000).
- Выходные данные
- В выходной файл OUTPUT.TXT выведите максимальное натуральное число B, квадрат которо-го не превосходит A. Число B следует выводить без лидирующих нулей.
- */
- bool more(int* A, int* B, int &sizeA, int &sizeB)
- {
- if (sizeA > sizeB)
- {
- return 1;
- }
- else
- {
- if (sizeA < sizeB)
- {
- return 0;
- }
- else
- {
- for (int i = sizeA - 1; i >= 0; i--)
- {
- if (A[i] > B[i])
- {
- return 1;
- }
- if (A[i] < B[i])
- {
- return 0;
- }
- }
- return 0;
- }
- }
- }
- int* mult(int* A, int* B, int sizeA, int sizeB, int & length)
- {
- length = sizeA + sizeB;
- int* C = new int[length];
- int BS = 0, BM = 0;
- for (int i = 0; i < length; i++)
- C[i] = 0;
- for (int i = 0; i < sizeA; i++)
- {
- for (int j = 0; j < sizeB; j++)
- {
- C[i + j] += A[i] * B[j];
- }
- }
- for (int i = 0; i < length; i++)
- {
- C[i + 1] += C[i] / 10;
- C[i] = C[i] % 10;
- }
- while (C[length-1] == 0) length--;
- return C;
- }
- int len(int* A)
- {
- int l = 0;
- while (A[l] != -1) l++;
- return l;
- }
- void inc(int* B, int i)
- {
- if (B[i] == 9) { B[i] = 0; inc(B, i + 1); }
- else if (B[i] == -1) B[i] = 1;
- else B[i]++;
- }
- void dec(int* B, int i)
- {
- if (B[i] == 0) { B[i] = 9; dec(B, i + 1); }
- else B[i]--;
- }
- int main()
- {
- setlocale(LC_ALL, "RUS");
- ifstream fin("input.txt");
- ofstream fout("output.txt");
- int* A;
- int* B;
- int sizeA = 0;
- int sizeB = 1;
- string str;
- fin >> str;
- A = new int[str.length()];
- for (int i = str.length() - 1; i >= 0; i--)
- {
- A[str.length()-1-i] = (str[i] - '0') - 0;
- sizeA++;
- }
- B = new int[str.length()+3];
- for (int i = 1; i < str.length()+3; i++) B[i] = -1;
- //ЭТУ ХУЙНЮ НАДО ИЗМЕНИТЬ
- for (int i = (str.length() - 1)/3; i >= 0; i--)
- {
- B[str.length()-i+3] = A[str.length() - 1 - i];
- }
- int length = 0;
- int* C = mult(B, B, sizeB, sizeB, length);
- int* CD = C;
- while (!more(C, A, length, sizeA))
- {
- inc(B, 0);
- for (int i = 0; i < length; i++)
- cout << C[i];
- cout << endl;
- sizeB = len(B);
- CD = C; int lo = length;
- C = mult(B, B, sizeB, sizeB, length);
- delete[] CD;
- }
- dec(B, 0);
- for (int i = sizeB-1; i >= 0; i--)
- fout << B[i];
- cout << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement