Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 30
1

Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число

26.09.2012, 15:59. Показов 6734. Ответов 9
Метки нет (Все метки)

Задание:
Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число. Найти все эти числа.
Написал примерный код, но сомневаюсь что правильно применил цикл. Сейчас компилятора нету проверить не могу. Посмотрите и помогите исправить ошибки.
Сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h" 
#include <iostream>
 
using namespace System;
using namespace std;
 
int main()
   {
   int j,n,summ;                     
for(n=10; n<=99; n++)      // цикл от 10 до 99
  {
     if(n%10)
    summ=(summ+n%10);
    j=summ+(summ*summ);
    n++;
   n/=10;
    
  }
  if(j=n)
    cout<<j;
    
   Console::ReadKey(false);
   return 0;
   }
Больше сомневаюсь в правильности операторов цикла for, но как сделать через while тоже пока не знаю.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2012, 15:59
Ответы с готовыми решениями:

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

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

Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число
б)если к сумме цифр двузначного числа прибавить квадрат этой суммы,то снова получится это...

Если к сумме цифр двузначного числа прибавить квадрат цифры единиц, то снова получится это двузначное число.
Если к сумме цифр двузначного числа прибавить квадрат цифры единиц, то снова получится это...

9
Почетный модератор
Эксперт С++
5845 / 2855 / 390
Регистрация: 01.11.2011
Сообщений: 6,903
26.09.2012, 16:16 2
Цитата Сообщение от freshness Посмотреть сообщение
Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число. Найти все эти числа.
Что это за бред?
83
(8+3) - сумма цифр
8+3 = 11

(8+3)^2 = 8^2 + 2*8*3 + 3^2 = 64 + 48 + 9 = 121

11 + 121 = 132

132 != 83

Я где-то чего-то не понимаю?
0
166 / 165 / 46
Регистрация: 10.10.2010
Сообщений: 725
26.09.2012, 16:28 3
Посмотрите вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
Если к сумме цифр двузначного числа прибавить квадрат этой суммы,
 то снова получится это двузначное число.
Найти все эти числа.
**/
#include <iostream>
 
int main()
{
    //Сумма нашего числа
    int sumDig = 0;
    for(int num = 10; num < 100; num++)
    {
        int num_temp = num;
        while(num_temp)
        {
            sumDig += num_temp%10;
            num_temp /= 10;
        }
        sumDig += sumDig*sumDig;
        if(sumDig == num)
            std::cout << num << std::endl;
        sumDig = 0;
    }
}
Добавлено через 40 секунд
Это число например 12
1+2 = 3
3 + 3*3 = 12
Его и выводим.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h" 
#include <iostream>
 
using namespace System;
using namespace std;
 
int main()
   {
   int j,n,summ;                     
for(n=10; n<=99; n++)      // цикл от 10 до 99
  {
     if(n%10)
    summ=(summ+n%10);
    j=summ+(summ*summ);
    n++;
   n/=10;
    
  }
  if(j=n)
    cout<<j;
    
   Console::ReadKey(false);
   return 0;
   }
Ваш код не очень верен,вы в цикле работаете с переменной n и потом ее изменяете,потом добавляете единицу(это в конце итерации n++ где)
Как минимум надо завести переменную,которая будет изменяться,чтобы не переписывать число и не менять его.
Разберите мой код,если что задавайте вопросы
1
Эксперт С++
4259 / 2233 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.09.2012, 16:29 4
всего 3 таких двузначных числа: 12, 42, 90

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
 
int Check(int a)
{
   int sum = a / 10 + a % 10;
   return a == sum + sum * sum;
}
 
int main()
{
   int i;
   for(i = 10; i < 100; i++)
      if (Check(i))
         std::cout << i << " ";
   return 0;
}
1
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 30
26.09.2012, 20:38  [ТС] 5
Цитата Сообщение от Rexer Посмотреть сообщение
Посмотрите вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
Если к сумме цифр двузначного числа прибавить квадрат этой суммы,
 то снова получится это двузначное число.
Найти все эти числа.
**/
#include <iostream>
 
int main()
{
    //Сумма нашего числа
    int sumDig = 0;
    for(int num = 10; num < 100; num++)
    {
        int num_temp = num;
        while(num_temp)
        {
            sumDig += num_temp%10;
            num_temp /= 10;
        }
        sumDig += sumDig*sumDig;
        if(sumDig == num)
            std::cout << num << std::endl;
        sumDig = 0;
    }
}
Добавлено через 40 секунд
Это число например 12
1+2 = 3
3 + 3*3 = 12
Его и выводим.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "stdafx.h" 
#include <iostream>
 
using namespace System;
using namespace std;
 
int main()
   {
   int j,n,summ;                     
for(n=10; n<=99; n++)      // цикл от 10 до 99
  {
     if(n%10)
    summ=(summ+n%10);
    j=summ+(summ*summ);
    n++;
   n/=10;
    
  }
  if(j=n)
    cout<<j;
    
   Console::ReadKey(false);
   return 0;
   }
Ваш код не очень верен,вы в цикле работаете с переменной n и потом ее изменяете,потом добавляете единицу(это в конце итерации n++ где)
Как минимум надо завести переменную,которая будет изменяться,чтобы не переписывать число и не менять его.
Разберите мой код,если что задавайте вопросы
Разобрал ваш код, примерно понял только подскажите кое что и укажите если не прав.
Вот для себя сделал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
   {
   int n,summ=0;                     
for(n=10; n<=99; n++)      // цикл от 10 до 99 
  {
int j = n;      // ввод переменной для цикла
    while(j)       //  цикл для нахождения суммы цифр числа.
{
          summ += j%10;  // J%10 это цифра берется? 
            j /= 10;   // как это действие производится? И как отсекается цифра от цисла?
  }
  summ += summ*summ;  // все понятно
        if(summ == n)   // все понятно
            cout << n << endl;   // все понятно
    
   
   return 0;
   }
}
Мои вопросы в коде программы в виде комментариев.
0
166 / 165 / 46
Регистрация: 10.10.2010
Сообщений: 725
27.09.2012, 00:48 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
   {
   int n,summ=0;                     
for(n=10; n<=99; n++)      // цикл от 10 до 99 
  {
int j = n;      // ввод переменной для цикла
    while(j)       //  цикл для нахождения суммы цифр числа.
{
          summ += j%10;  // J%10 это цифра берется? 
            j /= 10;   // как это действие производится? И как отсекается цифра от цисла?
  }
  summ += summ*summ;  // все понятно
        if(summ == n)   // все понятно
            cout << n << endl;   // все понятно
    sumDig = 0;
   
   return 0;
   }
}
Разберем ваши вопросы.
У вас есть переменные n,summ.
summ мы зануляем,чтобы при суммировании там не был мусор.
по n мы прогоняем цикл.
j мы вводим,для того,чтобы значение n не затерлось в цикле while,в то время,когда мы будем "отсекать цифры".
Тогда в цикле,пока у нас j не ноль условие стоит.
Операция % берет остаток от деления на числа на число.
Вот у вас число 11.например.
11%10 будет 1,так как это 1 целое и 1 десятая.
по сути %10 "отсекает" от "большого" числа по одному.
Дальше,так как мы уже получили одну первую цифру от числа,то наше число нужно уменьшить на одну позицию.т.е вот есть у нас 11,надо просто отсеять эту единицу.Как это сделать?
Операция / после применения дает нам целое число,не остаток!
т.е 21/10 = 2
11/10 = 1
это как раз и есть наше искомое второе число.
Теперь почему j /= 10;
Для того чтобы изменять само число,ведь то,что мы отсекли нам больше не надо.
Пройдем по каждой итерации числа 21 в цикле while
21%10 = 1
summ += 1;
21/10 = 2;
j = 2;
2%10 = 2;
summ += 2;
2/10 = 0;
j = 0;
выходим из цикла.
После выхода из цикла и проверки числа на ваше условие задачи не забудьте снова ЗАНУЛИТЬ summ,ведь вам еще с ней работать,а там уже от другого числа лежит мусор.
1
Заблокирован
27.09.2012, 01:30 7
Thinker, много лишней работы. надо проверять кратность трем. 12 * 12 + 12 = 156, 15 * 15 + 15 = 240, 18 * 18 + 18 = 342. Я не сразу понял задание, поэтому пост переписал.
0
Эксперт С++
4259 / 2233 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2012, 08:13 8
Цитата Сообщение от alkagolik Посмотреть сообщение
Thinker, много лишней работы. надо проверять кратность трем...

Не по теме:

оптимизировать, конечно, можно. Например, число a^2+a=a(a+1) всегда четное, поэтому можно только четные числа проверять и т.д.

0
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 30
27.09.2012, 08:47  [ТС] 9
Цитата Сообщение от Rexer Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
   {
   int n,summ=0;                     
for(n=10; n<=99; n++)      // цикл от 10 до 99 
  {
int j = n;      // ввод переменной для цикла
    while(j)       //  цикл для нахождения суммы цифр числа.
{
          summ += j%10;  // J%10 это цифра берется? 
            j /= 10;   // как это действие производится? И как отсекается цифра от цисла?
  }
  summ += summ*summ;  // все понятно
        if(summ == n)   // все понятно
            cout << n << endl;   // все понятно
    sumDig = 0;
   
   return 0;
   }
}
Разберем ваши вопросы.
У вас есть переменные n,summ.
summ мы зануляем,чтобы при суммировании там не был мусор.
по n мы прогоняем цикл.
j мы вводим,для того,чтобы значение n не затерлось в цикле while,в то время,когда мы будем "отсекать цифры".
Тогда в цикле,пока у нас j не ноль условие стоит.
Операция % берет остаток от деления на числа на число.
Вот у вас число 11.например.
11%10 будет 1,так как это 1 целое и 1 десятая.
по сути %10 "отсекает" от "большого" числа по одному.
Дальше,так как мы уже получили одну первую цифру от числа,то наше число нужно уменьшить на одну позицию.т.е вот есть у нас 11,надо просто отсеять эту единицу.Как это сделать?
Операция / после применения дает нам целое число,не остаток!
т.е 21/10 = 2
11/10 = 1
это как раз и есть наше искомое второе число.
Теперь почему j /= 10;
Для того чтобы изменять само число,ведь то,что мы отсекли нам больше не надо.
Пройдем по каждой итерации числа 21 в цикле while
21%10 = 1
summ += 1;
21/10 = 2;
j = 2;
2%10 = 2;
summ += 2;
2/10 = 0;
j = 0;
выходим из цикла.
После выхода из цикла и проверки числа на ваше условие задачи не забудьте снова ЗАНУЛИТЬ summ,ведь вам еще с ней работать,а там уже от другого числа лежит мусор.
Спасибо большое теперь все отлично понял. А то до этого знал, но постоянно сомневался так или нет. ).
Всем спс за ответы.
0
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 19
31.01.2014, 12:21 10
А как это в Паскале написать???
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2014, 12:21

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

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

Трёхзначные числа: если к сумме цифр числа прибавить квадрат этой суммы, то получится снова заданное число
Реализуйте программу поиска трёхзначных чисел, обладающих следующим свойством: если к сумме цифр...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru