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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.84
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
#1

Программа для нахождения автоморфных чисел. - C++

20.09.2010, 20:07. Просмотров 2553. Ответов 19
Метки нет (Все метки)

Задача такая: Напечатать N автоморфных чисел (автоморфным называется число, совпадающее с младшими цифрами своего квадрата). ( напр. 25,625; 6,36).
Пока есть такая программа
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
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
 
void main()
{
    const int N = 6; // Большее число не влезет в int.
    
    int CurrentN = 0;
    int Counter = 0;
 
    while(CurrentN < N)
    {
        char Buffer1[20];
        char Buffer2[20];
        char* StrCounter = itoa(Counter, Buffer1, 10);
        char* StrDoubleCounter = itoa(Counter * Counter, Buffer2, 10);
        if(strcmp(&StrDoubleCounter[strlen(StrCounter)], StrCounter) == 0)
        {
            printf("%s => %s\n", StrDoubleCounter, StrCounter);
            CurrentN++;
        }
        Counter++;
    }
    getchar();
}
Вопрос: можно ли как-нибудь сделать, чтобы программа выдавала определенное кол-во пар, например 2. А не сразу все 6.
И еще вопрос: возможно ли сделать поиск больше, чем 6 пар?...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2010, 20:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа для нахождения автоморфных чисел. (C++):

Программа для нахождения всех совершенных чисел до 5000 - C++
Мне нужно написать программу 1)которая найдет все числа до числа a, например если a=5 то программа должна вывести 1, 2, 3, 4, 5. ...

Программа для нахождения слов-чисел. очень срочно! - C++
Вообщем нужно: Задан текстовый файл Input.txt , в котором записана последовательность некоторых слов, разделенных одним или несколькими...

Программа для нахождения суммы квадратов всех нечетных чисел - C++
Знаю,что неправильно считает,3 раза подряд выдало 165,хотя вручную совсем другое число выходило. #include &quot;stdafx.h&quot; #include...

Программа для нахождения к-ой цифры в ряду подряд идущих натуральных чисел. - C++
Найти k-ую цифру в ряду цифр, составленных из подряд идущих натуральных чисел, начиная с 1. Тоесть ряд: 123456789101112131415.... Я...

Определить количество автоморфных чисел на заданном отрезке - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int n, i, b, c, k, v = 0; cin &gt;&gt; n &gt;&gt; b; ...

Программа нахождения простых чисел - C++
Я написал программу но в ней ошибка! Не пойму какая! Но мне важно понять как исправить именно эту прогу, знаю что есть другие проги на эту...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
20.09.2010, 21:17 #2
можешь
поменяй в n, не 6 а 2
а увеличить
поменяй все int на int68

Добавлено через 54 секунды
й сорри не int68 а __int64
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
20.09.2010, 21:20 #3
Цитата Сообщение от D@rkD@iver Посмотреть сообщение
__int64
Шо ето ?
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
20.09.2010, 21:26 #4
тип 64-битное число
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
20.09.2010, 21:28 #5
Цитата Сообщение от D@rkD@iver Посмотреть сообщение
тип 64-битное число
хм,незнал про такое.
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
20.09.2010, 22:00  [ТС] #6
А как сделать, чтобы n можно было выбрать в консоли, а не в самом коде?
И __int64 не помогло, если ввести 10, то чисел будет всего 7, и то 7 уже не корректо отображается, тоесть не полностью и с минусом.
D@rkD@iver
111 / 111 / 3
Регистрация: 01.10.2008
Сообщений: 876
20.09.2010, 22:16 #7
ну значит ничего не подулаешь, это теоритически невозможно
cin>>n;
papochka
20.09.2010, 23:17
  #8

Не по теме:

аж стало интересно - http://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html ...

Semapv
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 11
20.09.2010, 23:59 #9
Как мне кажется алгоритм должен быть другим, вам ведь нужен только младшие разряды, а для поиска старшие не нужны: например при проверке является ли 25 автоморфным, вам вовсе не нужна 6 из числа 625, достаточно узнать что первые два знака 25, а потом уже и вычислять оставшиеся числа и выводить.
можно так, в 25 * 25 = 625, а это 25 * 5 + 25 *20 = 625, нам же будет вообще достаточно 25 * 5 + 05 * 20 = 225, уже сейчас видно что данное число нам подходит, в данном примере не сильно заметна выгода но при больших числах, разница будет велика, и мы лучше сможем использовать емкость int. реализацию в коде я не придумал
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
21.09.2010, 09:15 #10
Цитата Сообщение от dyap Посмотреть сообщение
Напечатать 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
24
25
26
27
28
29
30
31
#include <iostream>
#include <iomanip>
 
bool isauthomorf(int x){
    int res = x*x;
    int tmp = x;
 
    while ( tmp ){
        if ((tmp % 10) != (res % 10))
            return false;
        res  /= 10;
        tmp /= 10;
    }
    return true;
}
 
int main()
{
    int cnt = 6; //количество нужных чисел
    int i = 1;
 
    while ( cnt ){
        if (isauthomorf(i) ){
            std::cout << i << std::setw(6);
            --cnt;
        }
        ++i;
    }
 
    return 0;
}
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
21.09.2010, 17:07  [ТС] #11
Цитата Сообщение от PointsEqual Посмотреть сообщение
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
#include <iostream>
#include <iomanip>
 
bool isauthomorf(int x){
    int res = x*x;
    int tmp = x;
 
    while ( tmp ){
        if ((tmp % 10) != (res % 10))
            return false;
        res  /= 10;
        tmp /= 10;
    }
    return true;
}
 
int main()
{
    int cnt = 6; //количество нужных чисел
    int i = 1;
 
    while ( cnt ){
        if (isauthomorf(i) ){
            std::cout << i << std::setw(6);
            --cnt;
        }
        ++i;
    }
 
    return 0;
}
10 чисел не выводит...
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
21.09.2010, 19:35 #12
Цитата Сообщение от dyap Посмотреть сообщение
10 чисел не выводит...
так пусть выводит минимум 15!

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
#include <iostream>
 
int cnt_digit(int x); // подсчет количества цифр числа
bool isauthomorf(int x);
 
int main(){
 
    int cnt = 15; //количество нужных чисел
    int i = 1;
 
    while ( cnt ){
        if (isauthomorf(i) ){
            std::cout << i << std::endl;
            --cnt;
        }
        ++i;
    }
 
 
    return 0;
}
 
 
 
bool isauthomorf(int x){
    int i = x;
    int tmp = i; //tmp is douplicate i
    int cnt = cnt_digit( i );
    int del = 1; //делитель
    int k = 1; //коэффициент домножения
    int b = 0; //результат умножения i на каждую цифру tmp
    int s = 0;
 
    for (int j = 0; j < cnt; ++j)
        del *= 10;
    int copy_del = del;
 
    while ( tmp ){
        b = i * (tmp % 10);
        tmp /= 10;
        b = ( b % del ) * k;
        del /= 10;
        k *= 10;
        s += b;
    }
 
    return ( (s % copy_del) == i ) ? true : false;
}
 
 
 
int cnt_digit(int x){
    int cnt = 0;
    int tmp = x;
    while (tmp){
        tmp /= 10;
        ++cnt;
    }
    return cnt;
}
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
21.09.2010, 19:36 #13
.....
Миниатюры
Программа для нахождения автоморфных чисел.  
dyap
2 / 2 / 0
Регистрация: 20.09.2010
Сообщений: 58
21.09.2010, 19:38  [ТС] #14
PointsEqual,
Это как раз почти то, что мне нужно. Один момент, можно ли сделать чтобы кол-во чисел можно было выбрать в консоли, а не в самом коде меня значение?
PointsEqual
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
21.09.2010, 19:58 #15
Цитата Сообщение от dyap Посмотреть сообщение
можно ли сделать чтобы кол-во чисел можно было выбрать в консоли
C++
1
cin >> cnt;
Добавлено через 17 минут
хм, странно на http://ru.wikipedia.org/wiki/Автоморфное_число говорится что последовательность начинается с 1, и там же приведена последовательность A003226, в которой говорится что последовательность начинается с 0. Парадокс)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2010, 19:58
Привет! Вот еще темы с ответами:

Программа нахождения совершенных чисел - C++
Нужно написать программу которая выводит совершенные числа...

Программа нахождения четных чисел в массиве. - C++
В одномерном массиве нужно найти количество четных чисел(желательно с помощью функции). Заранее благодарен!

Программа определения положительных чисел и нахождения их суммы - C++
Пользователь вводит четыре целых числа.найти сумму положительных из них. Хоть убейте, не понимаю, как правильно посчитать сумму.

Программа нахождения всех чисел,кратных введённому - C++
Помогите пожалуста с написанием программы! Нужно написать программу нахождения всех чисел,кратных введённому и таких,что не превышают...


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

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

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