Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2017, 17:28   #1
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
По умолчанию Переделать код, сделав в нем вложенный(е) цикл(ы) - C++

И снова доброго времени суток.
Была такая задача по теме вложенных циклов:
Дано натуральное число n. Среди чисел 1, ..., n найти такие, запись которых совпадает с последними цифрами записи их квадрата. Например, 6^2 (36), 25^2 (625) и т.д.
Написал я, значит, такой код:
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main() 
{
    int n, i, k;
    setlocale(0,"");
    cout << "Enter number n" << endl;
    cin >> n;
    cout << "Required numbers from 1 to " << n << " :" << endl;
    if (n >= 1) {
        
        for (i = 1; i <= n; i++) {
            if (i < 10)
                k = 10;
            else if (i >= 11 && i < 100)
                k = 100;
            else
                k = 1000;

            if ((i*i - i) % k == 0)
                cout << i << "*" << i << " = " << i*i << endl;
 
        }
    }
    else
        cout << "You entered a wrong number" << endl;
    
    system("pause");
}
Что мне, собственно, нужно? Я хотел бы услышать ваши советы, как переделать этот код, чтобы в нём присутствовал(и) встроенный(е) цикл(ы).
Заранее спасибо!
alexboliam вне форума Ответить с цитированием
Старый 26.11.2017, 17:42   #2
СтудПом
Форумчанин
 
Регистрация: 08.11.2017
Сообщений: 347
По умолчанию

Видимо, преподаватель рассчитывает увидеть вместо арифметической проверки, цикл прохода по числу от младшего разряда к старшему со сравнением разрядов исходного числа и его квадрата. При обнаружении несовпадения - прерывать цикл. При "штатном" выходе - считать, что проверяемое число является искомым.

Такой цикл проверки и будет вложенным в цикл прохода по ряду чисел.
СтудПом вне форума Ответить с цитированием
Старый 26.11.2017, 17:54   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
for (i=2; i<=n; i++){ 
d=i*i-i;
k=10;
while (d % k ==0) { 
k =k * 10;
}
if (k>=i) cout<<...
}
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 28.11.2017, 02:24   #4
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
По умолчанию

В Вашем коде выдает очень много лишних значений
alexboliam вне форума Ответить с цитированием
Старый 28.11.2017, 02:25   #5
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
По умолчанию

Кажется, об этом он говорил. Не могли бы Вы помочь с реализацией этого? Хотя бы с алгоритмом действий. Спасибо!
alexboliam вне форума Ответить с цитированием
Старый 28.11.2017, 02:26   #6
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
По умолчанию

Цитата:
Сообщение от СтудПом Посмотреть сообщение
цикл прохода по числу от младшего разряда к старшему со сравнением разрядов исходного числа и его квадрата. При обнаружении несовпадения - прерывать цикл.
а именно, с этой частью
alexboliam вне форума Ответить с цитированием
Старый 28.11.2017, 20:12   #7
alexboliam
Пользователь
 
Регистрация: 10.10.2017
Сообщений: 44
По умолчанию

Написал данный код(Сделать надо цикл прохода по числу от младшего разряда к старшему со сравнением разрядов исходного числа и его квадрата. При обнаружении несовпадения - прерывать цикл)
Этот код выдает много лишних значений, не могу понять, почему.
Код:
bool flag;
    int n,i,k,j;
    cout << "Enter number n" << endl;
    cin >> n;
    cout << "Required numbers from 1 to " << n << " :" << endl;
    if (n >= 1) {
        for (i = 1; i <= n; i++) {
            for (k = i, j = k*k; k > 0, j > 0; k /= 10, j /= 10) {
                if (k % 10 != j % 10) {
                    flag = false;
                    break;
                }
                else
                    cout << i << "*" << i << " = " << i*i << endl;
 
            }
        }
    else
           cout << "You entered a wrong number" << endl;
   
       system("pause");
UPD: Уже разобрался, спасибо.

Последний раз редактировалось alexboliam; 28.11.2017 в 20:20.
alexboliam вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает вложенный цикл devf Microsoft Office Excel 3 05.02.2012 19:34
Переделать цикл. Код внутри =) Silverstone Помощь студентам 4 21.12.2011 22:12
Тема: Вложенный цикл. Кристина Н Паскаль, Turbo Pascal, PascalABC.NET 3 04.12.2011 21:06
Двойной вложенный цикл haim Паскаль, Turbo Pascal, PascalABC.NET 1 30.01.2011 02:13
вложенный цикл FOR в вызываемой функции lifeton Общие вопросы Delphi 6 02.06.2010 17:35