Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 5.00
freshness
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 30
#1

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

26.09.2012, 15:59. Просмотров 3401. Ответов 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 тоже пока не знаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2012, 15:59     Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число
Посмотрите здесь:
Написать программу поиска двузначных чисел, обладающих следующим свойством: если к сумме цифр числа прибавить квадрат этой суммы, то получится снова д C++
C++ Если к сумме цифр возраста прибавить число рождения, то получится возраст. Сколько лет долгожитепю?
C++ Двухзначное число втрое больше суммы своих чисел, а квадрат этой суммы равен утроенному начальному числу. Найти это число.
C++ Найти двузначное число, куб суммы цифр которого равен квадрату самого числа
C++ Дано трёхзначное число.Определить, равен ли квадрат этого числа сумме его цифр.
C++ Дано целое трехзначное число. Определить, равен ли квадрат этого числа сумме кубов его цифр
Долгожитель (возраст не менее 100 лет) обнаружил однажды, что если к сумме квадратов цифр его возраста прибавить число дня его рождения, то как раз п C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
5591 / 2625 / 239
Регистрация: 01.11.2011
Сообщений: 6,454
Завершенные тесты: 1
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

Я где-то чего-то не понимаю?
Rexer
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 724
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++ где)
Как минимум надо завести переменную,которая будет изменяться,чтобы не переписывать число и не менять его.
Разберите мой код,если что задавайте вопросы
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 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;
}
freshness
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;
   }
}
Мои вопросы в коде программы в виде комментариев.
Rexer
163 / 162 / 20
Регистрация: 10.10.2010
Сообщений: 724
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,ведь вам еще с ней работать,а там уже от другого числа лежит мусор.
alkagolik
Заблокирован
27.09.2012, 01:30     Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число #7
Thinker, много лишней работы. надо проверять кратность трем. 12 * 12 + 12 = 156, 15 * 15 + 15 = 240, 18 * 18 + 18 = 342. Я не сразу понял задание, поэтому пост переписал.
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.09.2012, 08:13     Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число #8
Цитата Сообщение от alkagolik Посмотреть сообщение
Thinker, много лишней работы. надо проверять кратность трем...

Не по теме:

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

freshness
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,ведь вам еще с ней работать,а там уже от другого числа лежит мусор.
Спасибо большое теперь все отлично понял. А то до этого знал, но постоянно сомневался так или нет. ).
Всем спс за ответы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2014, 12:21     Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число
Еще ссылки по теме:
Написать программу нахождения суммы цифр двузначного целого числа и трёхзначного! C++
Дано двузначное число. Вывести число, полученное при перестановке цифр исходного числа. C++
C++ Равен ли квадрат заданного числа сумме кубов его цифр
Определить, равен ли квадрат числа учетверенной сумме кубов его цифр C++
C++ Определить, равен ли квадрат числа учетверенной сумме кубов его цифр

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

Или воспользуйтесь поиском по форуму:
Катенька Алекс7
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 19
31.01.2014, 12:21     Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число #10
А как это в Паскале написать???
Yandex
Объявления
31.01.2014, 12:21     Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru