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

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

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

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

14.06.2011, 19:14. Просмотров 5611. Ответов 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2011, 19:14     Числа армстронга
Посмотрите здесь:

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
slymit
9 / 9 / 2
Регистрация: 18.05.2011
Сообщений: 20
14.06.2011, 20:10     Числа армстронга #2
Функция pow() должна получать параметры типа float и int и возвращать float.
А у тебя всё int.
MsReatEA
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 21:13  [ТС]     Числа армстронга #3
Цитата Сообщение от slymit Посмотреть сообщение
Функция pow() должна получать параметры типа float и int и возвращать float.
А у тебя всё int.
это не особо помогло, может я что-то делаю не так?!
slymit
9 / 9 / 2
Регистрация: 18.05.2011
Сообщений: 20
14.06.2011, 21:18     Числа армстронга #4
Само задание напиши. Как я понял должны выводиться числа армстронга 2-ух, 3-ёх и 4-ёхзначные, т.е. вывод должен быть такой: 153, 370, 371, 407, 1634, 8208, 9474. Я правильно понимаю???
MsReatEA
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 21:22  [ТС]     Числа армстронга #5
Да правильно, вот мой результат http://*************/s/ZSQI

Добавлено через 2 минуты
Не могу понять откуда вылезают вот эти числа: "162,2187,26244"
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
14.06.2011, 21:43     Числа армстронга #6
Цитата Сообщение от MsReatEA Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
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; }
    }
}
Эта функция возвращает число только если найдёт его (причём возвращает только одно). А если такого числа нет? Функция обязана вернуть что-нибудь. Ну вот она что-нибудь и возвращает. Сами виноваты.
Остальные аналогичны.

Не по теме:

Ну и названия у функций. Чуть мозг не поломал

MsReatEA
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 22:00  [ТС]     Числа армстронга #7
C++
1
2
3
4
5
6
7
8
9
10
11
int dwyxznach (int l)
{
int b,a,i;
for (i=10;i<100;i++) {
     a=i/10;
     b=i%10;
     l=pow(a,2)+pow(b,2);
     if (l==i){printf("%d\n",l);}
    }
    return l;
}
Я не много изменил код, аналогично везде, единственное не могу понять откуда он берет цифры: http://*************/s/ZTc8
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
14.06.2011, 22:04     Числа армстронга #8
Оттуда же и берёт. В майне вывод остался?
162 == 9^2 + 9^2 то есть это последнее проверенное (хоть и не подходящее) число 99
MsReatEA
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 22:07  [ТС]     Числа армстронга #9
да остался
C++
1
2
3
4
5
6
7
8
9
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();
}
А как сделать чтобы не выводились эти лишние цифры?
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
14.06.2011, 22:16     Числа армстронга #10
Ой, да миллион способов. Я вот смотрю аргументы у функций за зря пропадают. Вот, сделал из первоначального вариант.
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
int dwyxznach (int l)
{
    int a,b,i1;
    a=b=0;
    for (i1=l;i1<100;i1++) {
        a=i1/10;
        b=i1%10;
        l=round(pow(a,2)+pow(b,2));
        if (l==i1){return l; }
    }
    return 0;
}
int trech3nach(int z)
{
    int a,y,x,h,i2;
    for (i2 = z; i2 < 1000; i2++) {
        x=i2/100;
        y=i2%100/10;
        h=i2%10;
        z=round(pow(x,3)+pow(y,3)+pow(h,3));
        if (z==i2){return z;}
    }
    return 0;
}
int cheterex3nach(int k)
{
    int i3,g,s,f,w;
    for (i3=k;i3<10000;i3++) {
        g=i3/1000;
        s=i3%1000/100;
        f=i3%100/10;
        w=i3%10;
        k=round(pow(g,4)+pow(s,4)+pow(f,4)+pow(w,4));
        if (k==i3){return k;}
    }
    return 0;
}
void main()
{
    int p;
    printf("Chisla armstronga:\n");
    p = 9;
    while ( (p = dwyxznach(p+1)) )
        printf("%d\n", p);
    p = 99;
    while ( (p = trech3nach(p+1)) )
        printf("%d\n", p);
    p = 999;
    while ( (p = cheterex3nach(p+1)) )
        printf("%d\n", p);
    getch();
}
MsReatEA
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 22:32  [ТС]     Числа армстронга #11
Он жалуется на round http://*************/s/ZTul
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
14.06.2011, 22:33     Числа армстронга #12
round можно убрать, это я для подстраховки. А можно определить самому, раз в библиотеке нет.
MsReatEA
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 22:35  [ТС]     Числа армстронга #13
уже убрал, спасибо большое Вам.
Shman
3 / 3 / 2
Регистрация: 30.04.2012
Сообщений: 212
22.05.2012, 17:30     Числа армстронга #14
Свой вариант для 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
26
27
28
#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=1; y<10; y++) 
     {                         
      for (z=1; z<10; z++) 
       {
        for (n=1; n<10; n++)
         {
           a=100*x+10*y+z; // Целое число сложенное из составных цифр
           st1=1; st2=1; st3=1;
            for (n=1; n; n++)
             { st1=st1*y; st2=st2*z; st3=st3*x; } // Возводим все цифры в степень             
           if (a == st1+st2+st3) // Если сумма степенй равна числу, то...
            { printf ("\n %d", a); } // выводим это число на экран
         }          
       }
     }
   }
 getch(); // Ожидать нажатия любой клавиши
 return 0; // Вернуть 0 функции int main()  
}
Вот только не работает . Ошибка где-то, найти не могу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2012, 18:36     Числа армстронга
Еще ссылки по теме:

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

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

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

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

Найти все числа Армстронга от 1 до к - C++
1)Определить, делителем каких чисел а, в, с является число к. 2)Составить программу, которая печатает таблицу умножения натуральных...


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

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
22.05.2012, 18:36     Числа армстронга #15
Shman, почему циклы в строках 15 и 19 используют одну и ту же переменную? Почему в цикле в сроке 19 такое странное условие для выполнения итерации (просто n)? Почему в строке 15 переменная n должна меняться до 10? Зачем вообще этих цикла два?

Добавлено через 1 минуту
И ещё почему. Почему переменные x, y и z меняются от 1, а не от нуля? Ну, то есть x-то понятно, чтобы число трёхзначным было. А остальные?
Yandex
Объявления
22.05.2012, 18:36     Числа армстронга
Ответ Создать тему
Опции темы

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