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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 5.00
freshness
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 30
26.09.2012, 15:59     Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число #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;
   }
Больше сомневаюсь в правильности операторов цикла for, но как сделать через while тоже пока не знаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2012, 15:59     Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число
Посмотрите здесь:

C++ Дано трёхзначное число.Определить, равен ли квадрат этого числа сумме его цифр.
Долгожитель (возраст не менее 100 лет) обнаружил однажды, что если к сумме квадратов цифр его возраста прибавить число дня его рождения, то как раз п C++
Написать программу поиска двузначных чисел, обладающих следующим свойством: если к сумме цифр числа прибавить квадрат этой суммы, то получится снова д C++
C++ как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы перевернутого числа вот в это строчке c=a+b,c;
Дано двузначное число. Вывести число, полученное при перестановке цифр исходного числа. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 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
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
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++
 Аватар для Thinker
4215 / 2189 / 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
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
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
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
27.09.2012, 01:30     Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число #7
Thinker, много лишней работы. надо проверять кратность трем. 12 * 12 + 12 = 156, 15 * 15 + 15 = 240, 18 * 18 + 18 = 342. Я не сразу понял задание, поэтому пост переписал.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 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++ Если к сумме цифр возраста прибавить число рождения, то получится возраст. Сколько лет долгожитепю?

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

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

Текущее время: 02:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru