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

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

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

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

26.09.2012, 15:59. Просмотров 3468. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2012, 15:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Если к сумме цифр двузначного числа прибавить квадрат этой суммы, то снова получится это двузначное число (C++):

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

Если к сумме цифр возраста прибавить число рождения, то получится возраст. Сколько лет долгожитепю? - C++
Долгожитель (возраст не более 100 лет) обнаружил однажды, что если к сумме цифр его возраста прибавить чисто его рождения, то как раз...

Двухзначное число втрое больше суммы своих чисел, а квадрат этой суммы равен утроенному начальному числу. Найти это число. - C++
Прошу помощи у знающих людей. Немогу решить 6 задач:( 2)Двухзначное число втрое больше суммы своих чисел, а квадрат этой суммы равен...

Найти двузначное число, куб суммы цифр которого равен квадрату самого числа - C++
Найти двузначное число, обладающее тем свойством, что куб суммы его цифр равен квадрату самого числа.

Дано трёхзначное число.Определить, равен ли квадрат этого числа сумме его цифр. - C++
Дано трёхзначное число.Определить, равен ли квадрат этого числа сумме его цифр. Как решить на С++, напишите пожалуйста решение...

Дано целое трехзначное число. Определить, равен ли квадрат этого числа сумме кубов его цифр - C++
Всем привет.Вот собственно в чем сабж.Не понимаю как сделать эту задачу Дано целое трехзначное число. Определить, равен ли квадрат этого...

9
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,530
Завершенные тесты: 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

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

Не по теме:

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

0
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,ведь вам еще с ней работать,а там уже от другого числа лежит мусор.
Спасибо большое теперь все отлично понял. А то до этого знал, но постоянно сомневался так или нет. ).
Всем спс за ответы.
0
Катенька Алекс7
0 / 0 / 0
Регистрация: 28.01.2014
Сообщений: 19
31.01.2014, 12:21 #10
А как это в Паскале написать???
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2014, 12:21
Привет! Вот еще темы с ответами:

Долгожитель (возраст не менее 100 лет) обнаружил однажды, что если к сумме квадратов цифр его возраста прибавить число дня его рождения, то как раз п - C++
Часть 1.с.м фото Часть 2. Долгожитель (возраст не менее 100 лет) обнаружил однажды, что если к сумме квадратов цифр его возраста...

Написать программу нахождения суммы цифр двузначного целого числа и трёхзначного! - C++
Написать программу нахождения суммы цифр двузначного целого числа и трёхзначного! Помогите плиз! Блок схему написал а вот программу не...

как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы перевернутого числа вот в это строчке c=a+b,c; - C++
как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы перевернутого числа вот в это строчке...

Дано двузначное число. Вывести число, полученное при перестановке цифр исходного числа. - C++
Скоро экзамен , кто чем может ) Помоги ближнему , ибо смех продлевает жизнь...) 4. Дано двузначное число. Вывести число,...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
31.01.2014, 12:21
Ответ Создать тему
Опции темы

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