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

Атоморфные числа, С++, помогите доработать код - C++

Восстановить пароль Регистрация
 
Assign_me_plz
5 / 5 / 0
Регистрация: 05.06.2011
Сообщений: 40
30.09.2011, 10:09     Атоморфные числа, С++, помогите доработать код #1
Сама задача выглядит так: среди чисел от 1 до n найти все атоморфные числа ( т.е. числа которые при возведении их в квадрат совпадают с последними цифрами квадрата( пример- 6^2=36, 5^2=25))
Подскажите, как определить коофициент с (он отвечает за степень, в которую нужно возвести 10,чтоб получить нужный нам остаток от деления)? Заранее благодарен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <math.h>
 
int main()
{ 
    int n;
    printf("Put the number (n=>1) : ");
    scanf("%f", &n);
    for (int x=1, u, c; x<n+1; x++)
    {      
    с=1
        if (x==(int)((x*x) % (int)pow(10, c))) printf("%d", u);
    }
    return(0);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.09.2011, 10:15     Атоморфные числа, С++, помогите доработать код #2
Цитата Сообщение от Assign_me_plz
C++
1
scanf("%f", &n);
неправильно считываешь
в scanf() спецификатор %f - для float
Assign_me_plz
5 / 5 / 0
Регистрация: 05.06.2011
Сообщений: 40
30.09.2011, 10:39  [ТС]     Атоморфные числа, С++, помогите доработать код #3
Спасибо, не заметил.
Была идея насчет деления несколько раз х-а на 10 с остатком, при каждом делении увеличивая с.
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.09.2011, 10:56     Атоморфные числа, С++, помогите доработать код #4
просто дели квадрат числа на десять
для однозначных:
C
1
2
    if (x == x * x % 10)
        printf("%d\n", x);
для двузначных дели на (10 * 2)
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
30.09.2011, 11:17     Атоморфные числа, С++, помогите доработать код #5
либо так:
C++
1
2
digit = x % 10;
if (digit * digit == x)
Так оно даже лучше. Для любых чисел неотрицательных. Не надо проверять разрядность.
Но очевидно, что для чисел с одной цифрой 0 и 1 подходит. А числа с тремя и более разрядами не подходят, поэтому можно организовать цикл до min(n, 99)
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
30.09.2011, 11:39     Атоморфные числа, С++, помогите доработать код #6
Функция log10( (double)X ) даст результатом число, на 1 меньшое за количество десятичных разрядов в числе Х.
То есть
C
1
2
3
#include <math.h>
.............................
с = (int)log10( (double)x ) + 1;
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.10.2011, 05:57     Атоморфные числа, С++, помогите доработать код #7
Цитата Сообщение от Thinker
Так оно даже лучше.
чем ?

Цитата Сообщение от Assign_me_plz
среди чисел от 1 до n найти все атоморфные числа ( т.е. числа которые при возведении их в квадрат совпадают с последними цифрами квадрата
то есть x - это число 6, а не 36
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
01.10.2011, 09:34     Атоморфные числа, С++, помогите доработать код #8
Цитата Сообщение от accept Посмотреть сообщение
чем ?
Проверки не нужны на одно- и двухразрядность
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.10.2011, 08:40     Атоморфные числа, С++, помогите доработать код #9
Цитата Сообщение от Thinker
Проверки не нужны на одно- и двухразрядность
где оно проверяет 25 * 25 = 625 ?
Assign_me_plz
5 / 5 / 0
Регистрация: 05.06.2011
Сообщений: 40
04.11.2011, 00:18  [ТС]     Атоморфные числа, С++, помогите доработать код #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
#include <stdio.h>
#include <math.h>
#include<string.h>
int main()
{ 
 int u,n,x,c;
 printf("input the n(n=>1) ");
 
 scanf("%i", &n);
 
if (n<1) 
{
          printf ("wrong n, sorry");
          return(0);
}
for (x=1 ; x<=n ; x++ )
{
      u=x*x;
      c=(int)log10((double)x)+1;
      if (x==(int)((u%(int)pow(10,c))))     printf("%i", u) ;
}
return(0);
}
anonimious
13 / 13 / 2
Регистрация: 17.10.2011
Сообщений: 54
04.11.2011, 03:38     Атоморфные числа, С++, помогите доработать код #11
Разбил на функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int stepen(int c){
    int a=1;
    for(int i=1;i<=c;i++) a*=10; 
    return a;}
int count(int i){
    int c=0;
    for(int j=i;j!=0;c++) j/=10;
    return c;}
int main(){
       setlocale(LC_ALL,"rus"); int n;
       cout<<"Введите число "; cin>>n;
        for(int i=1;i<=n;i++){
        if((i*i)%stepen(count(i))==i) cout<<i<<endl;}
        return 0;}
LosAngeles
Заблокирован
04.11.2011, 12:16     Атоморфные числа, С++, помогите доработать код #12
compile-time алгоритм, даже вывод в некотором смысле compile-time:
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//power
template <int x, int y> struct power
{
    static const int value = power<x, y-1>::value * x;
};
 
template <int x> struct power<x, 0>
{
    static const int value = 1;
};
//power end
 
 
 
 
//comparison
template <int x1, int x2> struct compare_if_x1_includes_x2
{
    static const int value = ((x1 % 10) == (x2 % 10)) * compare_if_x1_includes_x2<x1 / 10, x2 / 10>::value;
};
 
template <int x1> struct compare_if_x1_includes_x2<x1, 0>
{
    static const int value = 1;
};
 
template <int x2> struct compare_if_x1_includes_x2<0, x2>
{
    static const int value = 0;
};
 
template <> struct compare_if_x1_includes_x2<0, 0>
{
    static const int value = 1;
};
//comparison end
 
 
 
//a special case of comparison
template <int x> struct special_compare
{
    static const int value = ::compare_if_x1_includes_x2< power<x, 2>::value, x>::value;
};
//end special comparison
 
 
 
//output all tips
template <int x, bool y = (bool)special_compare<x>::value > struct OutputAll;
 
template <int x> struct OutputAll<x, true>
{
        OutputAll() 
        {
                cout << x << " is atomorphic!" << endl;
                OutputAll<x-1>();
        };
};
 
 
template <int x> struct OutputAll<x, false>
{
        OutputAll() 
        {
                OutputAll<x-1>();
        };
};
 
 
template <> struct OutputAll<1, true>
{
 
};
 
template <> struct OutputAll<1, false>
{
 
};
//end output
 
int main()
{
    OutputAll<30>();
 
    system("pause");
}
до 100 нашлось 5 6 25 и 76. Маловато что-то, кто делал run-time сходится? Ну ещё единица тоже вроде подходит под определение
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2011, 13:51     Атоморфные числа, С++, помогите доработать код
Еще ссылки по теме:

C++ Доработать код
Доработать код: возвести числа в степень, после сравнить полученные данные и найти большее C++

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

Или воспользуйтесь поиском по форуму:
vzverv
12 / 12 / 2
Регистрация: 25.10.2011
Сообщений: 50
04.11.2011, 13:51     Атоморфные числа, С++, помогите доработать код #13
подключи #include <iostream.h>
C++
1
2
3
4
5
6
7
8
9
10
for (x=1 ; x<=n ; x++ )
{
      u=x*x;
      c=(int)log10((double)x)+1;
      if (x==(int)((u%(int)pow(10,c))))
       printf("%i\n", u) ;
 
}
 getchar();
 getchar();
Yandex
Объявления
04.11.2011, 13:51     Атоморфные числа, С++, помогите доработать код
Ответ Создать тему
Опции темы

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