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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 38, средняя оценка - 4.74
MsReatEA
0 / 0 / 0
Регистрация: 14.06.2011
Сообщений: 7
14.06.2011, 19:14     Числа армстронга #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
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++
числа Армстронга C++
Числа Армстронга C++
Вывести числа Армстронга от 1 до n C++
Найти все числа Армстронга от 1 до K C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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()  
}
Вот только не работает . Ошибка где-то, найти не могу.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
22.05.2012, 18:36     Числа армстронга #15
Shman, почему циклы в строках 15 и 19 используют одну и ту же переменную? Почему в цикле в сроке 19 такое странное условие для выполнения итерации (просто n)? Почему в строке 15 переменная n должна меняться до 10? Зачем вообще этих цикла два?

Добавлено через 1 минуту
И ещё почему. Почему переменные x, y и z меняются от 1, а не от нуля? Ну, то есть x-то понятно, чтобы число трёхзначным было. А остальные?
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.
Помогите адаптировать под С++.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
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()  
}
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;
     }
 }
}
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
07.03.2013, 14:40     Числа армстронга #19
После выполнения цикла в строках 12 и 13 содержимое переменной chislo равно нулю, поэтому дальнейшее использование этой переменной для получения цифр разрядов невозможно. Нужна копия этой переменной.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2013, 14:10     Числа армстронга
Еще ссылки по теме:

C++ Числа Армстронга
Числа Армстронга C++
Получить числа Армстронга C++

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

Или воспользуйтесь поиском по форуму:
slimshandy911
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 3
09.03.2013, 14:10     Числа армстронга #20
Подскажите...как написать копию переменной?
Yandex
Объявления
09.03.2013, 14:10     Числа армстронга
Ответ Создать тему
Опции темы

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