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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.74
MsReatEA
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
#1

Числа армстронга - C++

14.06.2011, 19:14. Просмотров 6376. Ответов 23
Метки нет (Все метки)

Подскажите где ошибка, результат выдает не верный. Подскажите пжл где не верно.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <conio.h>
#include <math.h>
int dwyxznach (int l)
{
int a,b,i1;
a=b=l=0;
for (i1=10;i1<100;i1++) {
     a=i1/10;
     b=i1%10;
     l=pow(a,2)+pow(b,2);
     if (l==i1){return l; }
    }
}
int trech3nach(int z)
{
int a,y,x,h,i2;
for (i2 = 100; i2 < 1000; i2++) {
     x=i2/100;
     y=i2%100/10;
     h=i2%10;
     z=pow(x,3)+pow(y,3)+pow(h,3);
     if (z==i2){return z;}
     }
}
int cheterex3nach(int k)
{
int i3,g,s,f,w;
for (i3=1000;i3<10000;i3++) {
     g=i3/1000;
     s=i3%1000/100;
     f=i3%100/10;
     w=i3%10;
     k=pow(g,4)+pow(s,4)+pow(f,4)+pow(w,4);
     if (k==i3){return k;}
    }
}
void main()
{
int p,m,ch;
printf("Chisla armstronga:\n");
printf("%d\n",dwyxznach(p));
printf("%d\n",trech3nach(m));
printf("%d\n",cheterex3nach(ch));
getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2011, 19:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Числа армстронга (C++):

Числа Армстронга. Алгоритм находит не все числа - C++
Написал алгоритм поиска чисел Армстронга. Однако столкнулся со странной (на мой взгляд) проблемой: при компиляции с помощью MinGW...

Числа Армстронга - C++
помогите написать в си#

Числа* Армстронга - C++
Помогите, пожалуйста Натуральное число называется числом Армстронга, если сумма цифр числа, возведенных в N‐ную степень (где N – ...

Числа Армстронга - C++
смотри фото,помогите написать прогу в си ++

Числа Армстронга - C++
Не понимаю почему не работает, помогите пожалуйста. Натуральное число из n цифр является числом Армстронга, если сумма его цифр,...

числа Армстронга - C++
Помогите пожалуйста с написанием кода Среди чисел от 1 до 1000 найти все числа Армстронга. Число Армстронга - натуральное число, которое...

23
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
22.05.2012, 19:05 #16
grizlik78,
Дело в том что я пытался переписать с Паскаля на С++ один код, но что-то напутал .
Pascal
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
uses crt;
var n,x,y,z,a,s,s1,s2,s3,n1,b:integer;
begin
 clrscr;
for b:=0 to 9 do   {Четыре вложенных цикла для 4значного числа}
     for x:=1 to 9 do
         for y:=0 to 9 do
             for z:=0 to 9 do
                 begin
                     for n:=1 to 9 do
                         begin
                             a:=1000*b+100*x+10*y+z;   {Целое число, сложенное из составных цифр}
                             s:=1;s1:=1; s2:=1; s3:=1;
                             for n1:=1 to n do   {Возводим все цифры в степень}
                                 begin
                                     s:=s*x;
                                     s1:=s1*y;
                                     s2:=s2*z;
                                     s3:=s3*b;
                                 end;
                             if a=s+s1+s2+s3 then writeln(a);   {Если сумма степеней равна числу, выводим на экран}
                         end;
                 end;
 readln;
end.
Помогите адаптировать под С++.
0
grizlik78
Эксперт С++
1973 / 1466 / 122
Регистрация: 29.05.2011
Сообщений: 3,034
22.05.2012, 19:14 #17
Да, в паскалевском коде указанные ошибки отсутствуют. Разве что там с единицы должно начинаться b, а не x.
Повнимательнее переводить надо.
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
26
27
28
29
#include <stdio.h> // Подключаем
#include <conio.h> // модули
 
int main()
{
 int x, y, z, n, a, st1, st2, st3;  // Переменные
 
  for (x=1; x<10; x++) // Три вложенных цикла для трехзначного числа
   {         
    for (y=0; y<10; y++) 
     {                         
      for (z=0; z<10; z++) 
       {
        for (n=1; n<10; n++)
         {
           int n1;
           a=100*x+10*y+z; // Целое число сложенное из составных цифр
           st1=1; st2=1; st3=1;
            for (n1=1; n1<=n; n1++)
             { st1=st1*y; st2=st2*z; st3=st3*x; } // Возводим все цифры в степень             
           if (a == st1+st2+st3) // Если сумма степенй равна числу, то...
            { printf ("\n %d", a); } // выводим это число на экран
         }          
       }
     }
   }
 getch(); // Ожидать нажатия любой клавиши
 return 0; // Вернуть 0 функции int main()  
}
1
slimshandy911
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 3
07.03.2013, 14:24 #18
Подскажите пожалуйста, битый час сижу и не пойму почему не работает.
Выводит не числа армстронга, а все числа в заданном диапазоне.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "math.h"
# include <iostream>
using namespace std;
 
bool amstrong(int chislo){
    int a1,a2,a3,a4,d;
    int sum=0;
    int y=0;
    bool res;
 
    //Проверяем кол-во цифр в числе
    while(chislo!=0){
        chislo/=10;
        y++; }
    //После того как мы определили кол-во цифр, определяем является ли пришедшее число числом Амстронга
 
    if (y==1) {
        res=true;
    }
 
 
    if (y==2){
        res=false;
    }
 
 
    if (y==3) {
            a1=chislo/100;
            a2=(chislo%100)/10;
            a3=(chislo%100)%10;
            
            if (a1*a1*a1+a2*a2*a2+a3*a3*a3==chislo){
            res=true;}
    }
 
    if (y==4) {
            a1=chislo/1000;
            a2=(chislo%1000)/100;
            a3=((chislo%1000)%100)/10;
            a4=((chislo%1000)%100)%10;
 
            if (a1*a1*a1*a1+a2*a2*a2*a2+a3*a3*a3*a3+a4*a4*a4*a4==chislo) {
            res=true;
            }
        }
    return res;
}
 
 
 
int main () 
{
    int min,max;
 
 cout<<"\n Vvedite minimal'moe znachenie \n";
 cin>>min;
 
 cout<<"\n Vvedite maximal'noe znachenie \n";
 cin>>max;
 
 for (min; min<=max; min++){
     if (amstrong(min)) {
         cout<<min;
     }
 }
}
0
grizlik78
Эксперт С++
1973 / 1466 / 122
Регистрация: 29.05.2011
Сообщений: 3,034
07.03.2013, 14:40 #19
После выполнения цикла в строках 12 и 13 содержимое переменной chislo равно нулю, поэтому дальнейшее использование этой переменной для получения цифр разрядов невозможно. Нужна копия этой переменной.
0
slimshandy911
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 3
09.03.2013, 14:10 #20
Подскажите...как написать копию переменной?
0
grizlik78
Эксперт С++
1973 / 1466 / 122
Регистрация: 29.05.2011
Сообщений: 3,034
09.03.2013, 15:34 #21
C++
1
2
3
4
5
    int chislo_tmp = chislo;
    //Проверяем кол-во цифр в числе
    while(chislo_tmp!=0){
        chislo_tmp/=10;
        y++; }
0
slimshandy911
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 3
09.03.2013, 15:44 #22
Высвечивается ошибка. Пересматривал, все вроде правильно. В чем проблема?
"Run-Time Check Failure #3 - The variable 'res' is being used without being initialized."

Полный код:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "math.h"
# include <iostream>
using namespace std;
 
bool amstrong(int chislo){
    int a1,a2,a3,a4,d;
    int sum=0;
    int y=0;
    bool res;
     int chislo_tmp = chislo;
    //Проверяем кол-во цифр в числе
    while(chislo_tmp!=0){
        chislo_tmp/=10;
        y++; }
    //После того как мы определили кол-во цифр, определяем является ли пришедшее число числом Амстронга
 
    if (y==1) {
        res=true;
    }
 
 
    if (y==2){
        res=false;
    }
 
 
    if (y==3) {
            a1=chislo/100;
            a2=(chislo%100)/10;
            a3=(chislo%100)%10;
            
            if (a1*a1*a1+a2*a2*a2+a3*a3*a3==chislo){
            res=true;}
    }
 
    if (y==4) {
            a1=chislo/1000;
            a2=(chislo%1000)/100;
            a3=((chislo%1000)%100)/10;
            a4=((chislo%1000)%100)%10;
 
            if (a1*a1*a1*a1+a2*a2*a2*a2+a3*a3*a3*a3+a4*a4*a4*a4==chislo) {
            res=true;
            }
        }
    return res;
}
 
 
 
int main () 
{
    int min,max;
 
 cout<<"\n Vvedite minimal'moe znachenie \n";
 cin>>min;
 
 cout<<"\n Vvedite maximal'noe znachenie \n";
 cin>>max;
 
 for (min; min<=max; min++){
     if (amstrong(min)) {
         cout<<min;
     }
 }
}
0
grizlik78
Эксперт С++
1973 / 1466 / 122
Регистрация: 29.05.2011
Сообщений: 3,034
09.03.2013, 15:46 #23
Цитата Сообщение от slimshandy911 Посмотреть сообщение
Высвечивается ошибка. Пересматривал, все вроде правильно. В чем проблема?
"Run-Time Check Failure #3 - The variable 'res' is being used without being initialized."
Напиши в строке 9:
C++
1
bool res = false;
В принципе, это должно быть предупреждением, а не ошибкой.
0
Dzhulbars
0 / 0 / 0
Регистрация: 17.07.2015
Сообщений: 1
28.01.2017, 17:10 #24
Я конечно понимаю что я Кривокодер пока еще=) Но моя программа выдает числа Армстронга (Вводим количество цифр и получаем все числа Армстронга состоящие из N цифр)
И как выкладывать правильно код я не знаю=) Простите неграмотного за мой первый пост=)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
 
int main(){
    int n=1,q;
    int n1=n;
    cin >> q;
    while (n!= 1000000){
        int k = n,x=0;
        while (n>0){
            x += pow(n%10,q);
            n/=10;
        }
        if (x==k&& k>=1*pow(10,q-1)){
            cout << x <<endl;
        }
        n=k+1;
    }
    n1=n;
    return 0;
}
0
28.01.2017, 17:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2017, 17:10
Привет! Вот еще темы с ответами:

Вывести числа Армстронга от 1 до n - C++
Натуральное число, в записи которого z цифр, называется числом Амстронга, если сумма его цифр, возведенная в степень z, равна самому числу....

Получить числа Армстронга - C++
Натуральное число с n цифр является числом Армстронга, если сумма его цифр, возведенных в n-й степени, равен самому числу. Получить все...

Числа Армстронга. Алгоритм. - C++
Получить все числа Армстронга, состоящие из трех или четырех цифр (указание: натуральное число из n цифр называется числом Армстронга...

Не выводятся все числа Армстронга - C++
Нужно вывести 4-хзначные числа Армстронга. Одно дает, другое не правильное. Должно получиться 1634, 8208, 9474 Подскажите в чем проблема....


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

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

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