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

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

Войти
Регистрация
Восстановить пароль
 
TYMON
9 / 9 / 1
Регистрация: 17.06.2010
Сообщений: 354
#1

Числа Армстронга...Немогу решить - C++

20.06.2010, 15:18. Просмотров 665. Ответов 5
Метки нет (Все метки)

Помогите, если не сложно...Натуральное число, в записи которого n цифр, называется числом Армстронга, если сумма его цифр, возведенная в степень n, равна самому числу. Найти все чис-ла Армстронга от 1 до к
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2010, 15:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Числа Армстронга...Немогу решить (C++):

Немогу решить - C++
1/cos1* 1+2/cos(1+2)*...*1+2+...+n/cos(1+2+...+n);

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

Числа армстронга - C++
Подскажите где ошибка, результат выдает не верный. Подскажите пжл где не верно. #include <stdio.h> #include <conio.h> #include...

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

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

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

5
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
20.06.2010, 16:24 #2
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
#include "stdafx.h"
#include <iostream>
#include <math.h>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int a = 0, n = 0, sum = 0, control;
    cout<<"Input a number\n";
    cin>>a;
    for(int i=1;i<=a;i++)
    {
        control = i;
        while(control > 0)
        {
            sum += control%10;
            control /= 10;
            n++;
        }
        if((int)pow(double(sum),n) == i)
            cout<<"Number "<< i << " is the number of Armstrong\n";
        n = 0;
        sum = 0;
    }
    return 0;
}
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
20.06.2010, 16:47 #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
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
67
68
69
70
71
#include <iostream>
#include <conio.h>
 
using namespace std;
 
unsigned long long NumberToPower(unsigned long long number, unsigned short power);
int Power(long long double in_number);
 
int main()
{
    long long double in_number=0;
    long long double out_number=0;
    unsigned long long next_symb=0;
    long long double sum=0;
 
    cin>>in_number;
    cout<<"Posledovatelnost chisel Armstronga::"<< endl<< endl;
    out_number=in_number;
 
    while (in_number>=0)
    {
       while (out_number>0)
       {
          next_symb=out_number%10;
          out_number=out_number/10;
          sum=sum+NumberToPower(next_symb,Power(in_number));
       }
 
       if (sum==in_number)
       cout<< in_number<< " "<< endl;
       in_number--;
       out_number=in_number;
       sum=0;
    }
    cout<< endl<< "complete";
    getch();
    return 0;
}
 
unsigned long long NumberToPower(unsigned long long number, unsigned short power)
{
    if (power == 1)
    return number;
    if (power == 0)
    return 1;
    return (number*NumberToPower(number,power-1));
}
 
int Power(long long double in_number)
{
    if (in_number<10)
    return 1;
    if ((in_number>9) and (in_number<100))
    return 2;
    if ((in_number>99) and (in_number<1000))
    return 3;
    if ((in_number>999) and (in_number<10000))
    return 4;
    if ((in_number>9999) and (in_number<100000))
    return 5;
    if ((in_number>99999) and (in_number<1000000))
    return 6;
    if ((in_number>999999) and (in_number<10000000))
    return 7;
    if ((in_number>9999999) and (in_number<100000000))
    return 8;
    if ((in_number>99999999) and (in_number<1000000000))
    return 9;
    if ((in_number>999999999) and (in_number<=(sizeof(unsigned int))))
    return 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
nt Power(long long double in_number)
{
    if (in_number<10)
    return 1;
    if ((in_number>9) and (in_number<100))
    return 2;
    if ((in_number>99) and (in_number<1000))
    return 3;
    if ((in_number>999) and (in_number<10000))
    return 4;
    if ((in_number>9999) and (in_number<100000))
    return 5;
    if ((in_number>99999) and (in_number<1000000))
    return 6;
    if ((in_number>999999) and (in_number<10000000))
    return 7;
    if ((in_number>9999999) and (in_number<100000000))
    return 8;
    if ((in_number>99999999) and (in_number<1000000000))
    return 9;
    if ((in_number>999999999) and (in_number<=(sizeof(unsigned int))))
    return 10;
}
но вычисления раз в 10 долже будут
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
20.06.2010, 18:29 #4
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
//Натуральное число, в записи которого n цифр, называется числом Армстронга, 
//если сумма его цифр, возведенных в степень n, равна самому числу. 
//Найти все чис-ла Армстронга от 1 до к.
#include <cmath>
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <sstream>
#include <string>
 
typedef std::string       T_str;
typedef std::vector<int>  T_nums;
 
struct T_plus_dig_pow
{
    int stepen_;    
    T_plus_dig_pow(int stepen) : stepen_(stepen)
    {}
    int operator() (int sum, char char_dig)
    {
        return  sum += static_cast<int>(pow(static_cast<double>(char_dig - '0'), stepen_));        
    }
};
 
bool is_not_armstrong_num(int n)
{
    std::ostringstream  dig_str_potok;
    dig_str_potok << n;
    T_str  dig_str(dig_str_potok.str());
    return n != std::accumulate(dig_str.begin(), dig_str.end(), 
                                0, T_plus_dig_pow(dig_str.size()));
}
 
struct T_generate_podrjad
{
    int begin_num_;
    T_generate_podrjad(int  begin_num) : begin_num_(begin_num)
    {}
 
    int operator() ()
    {
        return begin_num_++;
    }
};
 
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "Введите k: ";
    int k;
    std::cin >> k;
    const int  start_num = 0;
    std::cout << "Числа Армстронга в диапазоне от "
              << start_num
              << " до "
              << k
              << ": "
              << std::endl;
    T_nums  nums(k - start_num + 1);
    std::generate(nums.begin(), nums.end(), T_generate_podrjad(start_num));
    std::remove_copy_if(nums.begin(), nums.end(), 
                        std::ostream_iterator<int>(std::cout, "\n"), is_not_armstrong_num);
    return 0;
}
0
Alik-Soldier
9 / 9 / 0
Регистрация: 01.05.2009
Сообщений: 127
20.06.2010, 19:52 #5
не так задание понял...вот так правильнее...
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
#include "stdafx.h"
#include <iostream>
#include "math.h"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int a = 0, n = 0, sum = 0, control;
    cout<<"Input a number\n";
    cin>>a;
    for(int i=1;i<=a;i++)
    {
        control = i;
        while(control > 0)
        {
            control /= 10;
            n++;
        }
        control = i;
        while(control > 0)
        {
            sum += int(pow(double(control%10),n));
            control /= 10;
        }
        if(sum == i)
            cout<<"Number "<< i << " is the number of Armstrong\n";
        n = 0;
        sum = 0;
    }
    return 0;
}
0
TYMON
9 / 9 / 1
Регистрация: 17.06.2010
Сообщений: 354
20.06.2010, 22:23  [ТС] #6
Всем спасибо)) Получилось...)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2010, 22:23
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
20.06.2010, 22:23
Ответ Создать тему
Опции темы

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