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

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

Войти
Регистрация
Восстановить пароль
 
__Klim
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 3
#1

Числа Армстронга. Алгоритм находит не все числа - C++

07.03.2017, 04:34. Просмотров 374. Ответов 2

Написал алгоритм поиска чисел Армстронга.
Однако столкнулся со странной (на мой взгляд) проблемой: при компиляции с помощью MinGW программа находит не все числа(пропускает 153, 1 741 725). При этом Студия отрабатывает корректно.

С чем это может быть связано?
Как можно исправить/улучшить код?
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
#include <iostream>
#include <vector>
#include <cmath>
 
bool armstrong(int num){
    int i = 0, k = num, c = num;
    while(k> 0){
        i++;
        k /=10;
    }
    int result = 0;
    while(num != 0){
        result+=pow(num%10,i);
        num /=10;
    }
    if (result ==c) return true;
    return false;
}
 
int main(){
    std::vector<int> vec;
    for(int i = 1; i < 10000000; ++i){
        if(armstrong(i))
            vec.push_back(i);
    }
    for(auto i: vec){
        std::cout<<i<<" ";
    }
    return 0;
}
P.S. Я нашел схожую тему на Форуме, но итоговый вариант ведет себя так же странно с MinGW.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2017, 04:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Числа Армстронга. Алгоритм находит не все числа (C++):

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

Напишите программу с функцией, которая находит все автоморфные числа числа из промежутка от А до В - C++
Найдите, пожалуйста, ошибки!!! #include &lt;iostream&gt; using namespace std; bool Avtomorf (int n) { long int m; bool f; m=n*n; ...

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

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

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

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

2
nd2
2819 / 2389 / 849
Регистрация: 29.01.2016
Сообщений: 7,991
07.03.2017, 04:56 #2
Цитата Сообщение от __Klim Посмотреть сообщение
при компиляции с помощью MinGW программа находит не все числа(пропускает 153, 1 741 725).
Mingw они разные бывают. У меня не пропускает: mingw 4.9.2.
0
Миниатюры
Числа Армстронга. Алгоритм находит не все числа  
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4276 / 2295 / 567
Регистрация: 18.10.2014
Сообщений: 3,910
07.03.2017, 05:17 #3
Цитата Сообщение от __Klim Посмотреть сообщение
С чем это может быть связано?
Ну например c тем, что вызываются разные версии функции pow. Если подключается <cmath>, то вызвать следует std::pow, а не pow. А что за pow там болтается в глобальной области видимости - трудно предсказать.

Можно также посоветовать написать свое целочисленное возведение в степень, вместо использования совершенно не предназначенного для таких целей <cmath> и std::pow.

Добавлено через 6 минут
C
1
2
3
4
5
6
7
8
9
10
11
unsigned my_pow(unsigned a, unsigned b)
{
  if (b == 0)
    return 1;
    
  if (b == 1)
    return a;
    
  unsigned p = my_pow(a, b / 2);
  return b % 2 == 0 ? p * p : p * p * a;
}
C
1
2
3
4
5
6
7
8
9
10
unsigned long long my_pow(unsigned a, unsigned b)
{
  unsigned long long result = 1;
 
  for (unsigned long long pow_a = a; b != 0; b >>= 1, pow_a *= pow_a)
    if ((b & 1) != 0)
      result *= pow_a;
 
  return result;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2017, 05:17
Привет! Вот еще темы с ответами:

Вывести все числа Армстронга в заданном интервале - C++
Здравствуйте, В универе дали задание: вывести все числа Армстронга в интервале ; Понимаю что это уже давно сделали, но я хотел свою...

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

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

Написать программу, которая находит все пары А и В для числа Р - C++
Пиплы , пожалейте помогите если есть какието мысли впишитесь!!ПЛЗ суть такова написать прогу на С+ Очевидно, что любое натуральное...


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

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

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