• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Числа, Которые Совпадают С Последними Цифрами Своих Квадратов

  • Автор темы kisslata
  • Дата начала
K

kisslata

У меня есть код программы, которая на промежутке [1..n] вычисляет числа, которые совпадают с последними цифрами своих квадратов (5^2=25, 25^2=625), но тут n вводится с клавиатуры. Помогите поправить, чтобы n изначально был 1000. То есть, чтобы программа сразу считала на промежутке [1..1000]. С++


#include <iostream>

int GetOrder (int n)
{
int res = 1;
while (n > 0)
{
n /= 10;
res *= 10;
}
return res;
}

int main()
{
setlocale (LC_ALL, ".1251");
int i, n;
long long d;

std::cout << "Введите число\n";
std::cin >> n;

i = 1;

std::cout << std::endl;

while (i <= n)
{
d = i * i;
if (i == d % GetOrder (i))
std::cout << i << std::endl;
i++;
}

return 0;
}
 
W

Whatka

вот по быстрому набросал

конечно же кучу ифов в конце цикла
надо заменить чем то более красивым
C++:
//
#include	<iostream>
#include	<math.h>
void main()
{
int n;
std::cout<<"Inuput:";
std::cin>>n;
float i(1);
int k=1;
while(i<=n)
{
if ((((int)pow(i,2)) % ((int)pow(10.,k))) == i)
std::cout<<i<<"=>"<<pow(i,2)<<"\n";
i++;
if(i==11)				  k=2;
if(i==101)	 k=3;
if(i==1001)	 k=4;
if(i==10001)		  k=5;
}
}
//
 
R

rrrFer

в этом случае Pow работает гораздо дольше чем i*i. Гора-а-здо дольше, т.к. оно возводит в дробную степень число с плавающей точкой, а это охренеть какая трудоемкая операция пос равнению в умножением двух целых чисел. Насколько трудоемкая, что о затратах на вызов функции речи не идет.

подход к задаче зато зачетный ) я бы особо не парился, числа писал в stringstream, считывал строки, получал последний символ, получал цифру и уже потом в степень возводил...работало бы это гора-а-здо дольше вашего кода. И думаю, даже ваше pow меня не спасло ).
 
W

Whatka

ну да заменить стоит на умножение)
может есть какие идеи на счёт последних ифов?как одним условием заменить?
 
K

kisslata

ребятки, а как сделать, чтобы n не вводить? а при запуске программы, чтобы сразу выводило список:
"25 625
76 5776
376 141376
625 390625"
 
R

rrrFer

по этой фразе становится понятно что и предыдущий код не ваш)
оно и раньше было понятно ) ТС оставалось лишь 1 цикл дописать (а посмотри сколько он там всего написал...)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!