fork download
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4.  
  5. // Возвращает длину числа a
  6. int GetLength(int a) {
  7. return (a==0?1:log10(a)+1);
  8. }
  9.  
  10. // Возвращает левую часть числа a до n-той цифры включительно
  11. int LeftPart(int a, int n) {
  12. return a/pow(10, GetLength(a) - n);
  13. }
  14.  
  15. // Возвращает правую часть числа a после n-той цифры
  16. int RightPart(int a, int n) {
  17. int p = pow(10, GetLength(a) - n);
  18. return a%p;
  19. }
  20.  
  21. int main() {
  22. int n, m, i = 0, toPrint; // Столбцы, строки, счетчик очередного числа для возведения в квадрат, текущее значение для печати
  23. bool haveRest = false; // Есть ли часть числа, "отрезанная" после переноса строки
  24. cin >> n >> m;
  25. int columnsLeft = n; // Присваиваем переменной для оставшихся свободных столбцов значения общего количества столбцов
  26. while(m > 0) { // Пока есть свободные строки
  27. if(columnsLeft==0) { // Если не осталось свободных столбцов
  28. m--; // Уменьшаем на 1 количество свободных строк
  29. if(m > 0) // Если свободные строки еще остались, переносим курсор на новую строку
  30. cout << endl;
  31. columnsLeft = n; // Восстанавливаем число оставшихся столбцов
  32. haveRest = false; // "Отрезанной" части числа нет
  33. } else {
  34. i = (haveRest?i:++i); // Увеличиваем i на 1, только если нет "отрезанной" части
  35. toPrint = (haveRest?toPrint:i*i); // Присваиваем toPrint значение очередного квадата, только если нет "отрезанной" части
  36. if(GetLength(toPrint) <= columnsLeft) { // Если хватает свободных столбцов для печати числа в toPrint
  37. cout << toPrint; // Печатаем значение toPrint
  38. columnsLeft -= GetLength(toPrint); // Обновляем количество свободных столбцов
  39. haveRest = false; // "Отрезанной" части числа нет
  40. } else {
  41. cout << LeftPart(toPrint, columnsLeft); // Печатаем левую часть числа в toPrint, чтобы заполнить все оставшиеся свободные столбцы
  42. toPrint = RightPart(toPrint, columnsLeft); // Присваиваем toPrint значение его ненапечатанной части
  43. m--; // Уменьшаем на 1 количество свободных строк
  44. if(m > 0) // Если свободные строки еще остались, переносим курсор на новую строку
  45. cout << endl;
  46. columnsLeft = n; // Восстанавливаем число оставшихся столбцов
  47. haveRest = true; // "Отрезанная" часть числа есть
  48. }
  49. }
  50. }
  51. return 0;
  52. }
Success #stdin #stdout 0s 3416KB
stdin
5 5
stdout
Standard output is empty