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

Задача: преобразование систем счисления - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не могу скомпилировать программу на движке ODE http://www.cyberforum.ru/cpp-beginners/thread654279.html
Суть: имеется движок ODE v.0.12, имеется готовая программка, которая использует движок и генерирует случайные 3-мерные существа на открытом пространстве (грубо говоря). Проблема в том, что не получается скомпилировать это всё дело без ошибок. Везде появляется одна и та же ошибка: "C:\***\ode-0.12\include\ode\common.h(111): fatal error C1189: #error : You must #define dSINGLE or dDOUBLE". ...
C++ Целые числа по 20 символов даны 2 строки в них нужно вписать целые числа размером в двадцать символов и затем сложить. при вводе пишу числа в ответ выводит к примеру 2.97429-307? #include <iostream> #include <conio.h> #include <cstring> using namespace std; char x; char y; char z; int main () http://www.cyberforum.ru/cpp-beginners/thread654275.html
Сортировать массив по возрастанию методом выбора C++
Дан одномерный массив из n (n≤104) элементов a1,a2,…,an.( |ai|≤2×109). Сортировать по возрастанию методом выбора. Алгоритм сортировки оформить в виде ФУНКЦИИ!
C++ Нужно оптимизировать готовый код, чтобы не было стыдно показать
Мне дали сделать задачку, чтобы проверить мои знания в ООП (я только 2 месяца назад начал изучать С++). И так, задача: Определить класс (или структуру данных при использовании процедурного подхода), описывающий покупку одного и того же штучного товара по одной и той же цене (в рублях) в течение одного месяца и содержащий сведения о дне покупки и количестве приобретенных единиц. Допускаются...
C++ Builder Поиск файлов по маске. Не видит TSearchRec http://www.cyberforum.ru/cpp-beginners/thread654250.html
Задание: необходимо создать папку, в которой 10 файлов (*.txt); организовать поиск файлов по маске. Что имею: #include <stdio.h> #include <iostream.h> #include <string.h> #include <fstream.h> #include <direct.h> //так как dir.h не пошла под NetBeans void FindFull(string dir, string mask) {
C++ Функция scanf() //--------------------------------------------------------------------------- #include <vcl.h> #include <stdio.h> #include <conio.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused подробнее

Показать сообщение отдельно
arreke
0 / 0 / 0
Регистрация: 14.05.2012
Сообщений: 13

Задача: преобразование систем счисления - C++

19.09.2012, 11:57. Просмотров 822. Ответов 2
Метки (Все метки)

Описание

Имеются 2 цифры в разных системах счисления, цель задачи найти, в каких системах счисления 2 цифры равны. Например, 12 и 5, в десятичной системе счисления они не равны, но 12 в 3-чной системе счисления и 5 в 6-чной или десятичной системе счисления равны между собой.

Input

Вводятся два числа M и N ( которые в десятичной системе не превышают 1000000000), системы счисления находятся в диапазоне 2~36. Для чисел меньше 10 использовать цифры 0~9, для чисел больше 10 использовать заглавные буквы A~Z.

Output

Вывести в каких системах счисления M и N равны. Если равны, вывести соответствующий результат (если результатов несколько, вывести тот результат, в котором система счисления наименьшая), если не равны, вывести ошибку.

Например, Input:
12 5↵

Output:
12 (base 3) = 5 (base 6)↵

Мой код:

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 <stdlib.h>
#include <string.h>
 
int check (char m1[256], char n1[256])
{
  int i, j;
  for (i=2; i<=36; i++)
  for (j=2; j<=36; j++) if (strtol( m1, NULL, i ) == strtol( n1, NULL, j )) { printf ("%s (base %d) = %s (base %d)\n", m1, i, n1, j); return 1; }
  printf("%s is not equal to %s in any base 2..36\n", m1, n1);
  return 0;
}
 
int main() {  
  
  long int m, n, i;
  char m1[256], n1[256];
 
  scanf("%d %d", &m, &n);
  sprintf(m1, "%ld", m);
  sprintf(n1, "%ld", n);
 
  check(m1, n1);
 
  printf("\n");
  system("PAUSE");
  return 0;  
}
1)
при вводе:
12 5↵
ответ правильный:
2 (base 3) = 5 (base 6)↵

2)
про вводе:
10 A↵
ответ должен быть:
10 (base 10) = A (base 11)↵
у меня получается:
10 is not equal to -1073909472 in any base 2..36↵

3)
про вводе:
12 456↵
ответ должен быть:
12 is not equal to 456 in any base 2..36↵
у меня получается:
12 (base 27) = 456 (base 6)↵

подскажите, пожалуйста, что не так?

Добавлено через 6 минут
понял в чем 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int check (char m[256], char n[256])
{
  int i, j;
  for (i=2; i<=36; i++)
  for (j=2; j<=36; j++) if (strtol( m, NULL, i ) == strtol( n, NULL, j )) { printf ("%s (base %d) = %s (base %d)\n", m, i, n, j); return 1; }
  printf("%s is not equal to %s in any base 2..36\n", m, n);
  return 0;
}
 
int main() {  
  
  long int i;
  char m[256], n[256];
 
  scanf("%s %s", &m, &n);
 
  check(m, n);
 
  printf("\n");
  system("PAUSE");
  return 0;  
}
а как быть с третьей ошибкой?

Добавлено через 1 час 14 минут
вот код моего соседа из Японии, у него все ответы правильные, но код какой то слишком большой получился, я ничего не смог разобрать:

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
    #include<stdio.h>           
      
    int change(char c)         
    {          
        int result=-1;          
        if ((c>='0')&&(c<='9'))          
        {result=(c-'0');}          
        else if((c>='A')&&(c<='Z'))          
        {result=(c-'A')+10;}    
        else if((c>='a')&&(c<='z'))    
        {result=(c-'a')+10;}    
        return result;          
    }          
      
    long double m(int x,int y)          
    {          
        long double result=1;          
        for(int i=0;i<y;i++)          
            result=result*x;          
        return result;          
    }          
      
    long double f(int *a,int lenth,int base)          
    {          
        long double result=0;          
        int k=0;          
        for(int i=lenth;i>0;i--)          
        {          
                      
            result=result+(*(a+k))*m(base,i-1);          
            k++;          
        }          
        return result;          
    }            
      
      
       int main()          
    {          
        int w=0;          
        int num[2][40];          
        for(int i=0;i<2;i++)          
        {          
            for(int j=0;j<40;j++)          
            {num[i][j]=-1;}          
        }          
        char ch[80];          
        char ch1[40],ch2[40];          
        int choice=0;          
        int m=0;          
              
        gets(ch);          
                for(int i=0;i<1;i++)       
            {       
                if(ch[i]==' ')       
                {       
                    for(int j=i;j<40;j++)       
                    {       
                        ch[j]=ch[j+1];       
                      }       
                    i=i-1;       
                }       
            }       
             
        for(int i=0;i<80;i++)          
        {          
            if(ch[i]=='\0')          
                break;          
            else if(ch[i]==32)          
            {choice=1;m=0;}          
            else         
            {num[choice][m]=change(ch[i]);m++;}          
        }    
        
             
        int max1=1,max2=1;          
        for(int i=0;i<40;i++)          
        {          
            if(num[0][i]>max1)          
                max1=num[0][i];          
            if(num[1][i]>max2)          
                max2=num[1][i];          
        }          
              
            
        int lenth1=0,lenth2=0;          
        for(int i=0;i<40;i++)          
        {          
            if(num[0][i]==-1)          
                break;          
            lenth1++;          
        }          
            for(int i=0;i<40;i++)          
        {          
            if(num[1][i]==-1)          
                break;          
            lenth2++;          
        }    
               
            for(int i=0;i<40;i++)       
            {       
                if(ch[i]==' ')       
                {       
                    for(int j=i;j<40;j++)       
                    {       
                        ch[j]=ch[j+1];       
                    }       
                    i=i-1;       
                }       
            }       
            char *chp;          
            chp=&ch[0];          
            for(int i=0;i<lenth1;i++)          
            {          
                ch1[i]=*chp;          
                chp++;          
            }          
            ch1[lenth1]='\0';          
            
            for(int i=0;i<lenth2;i++)          
            {          
                ch2[i]=*chp;          
                chp++;          
            }          
            ch2[lenth2]='\0';          
                   
        for(int i=max1+1;i<37;i++)          
        {          
            for(int j=max2+1;j<37;j++)          
            {          
               if(f(&num[0][0],lenth1,i)==f(&num[1][0],lenth2,j))          
                {          
                printf("%s (base %d) = %s (base %d)\n",ch1,i,ch2,j);          
                w=1;          
                if (w==1)          
                    break;          
                }          
                if (w==1)          
                    break;                       
            }          
            if (w==1)          
                    break;          
        }          
        if(w==0)          
            printf("%s is not equal to %s in any base 2..36\n",ch1,ch2);     
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru