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

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

Войти
Регистрация
Восстановить пароль
 
A1mirr
Сообщений: n/a
#1

Изменение системы счисления - C++

04.11.2012, 19:09. Просмотров 579. Ответов 0
Метки нет (Все метки)

Задача: перевести число (возможно, очень большое) из данной системы счисления в другую, а так же циклически сдвинуть переведённое число его на d позиций
Проблема решения: на некоторых вариантах (например 16->32 или 22->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
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
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
void main ()
{
    long i=0,n=0,k=0,d=0,p=1;
    char c[32768], ic[32768],dc[32768], inp[32768],base_out,base_inp,ch;
    base_inp=10;                                        //в какой вводим
    base_out=22;                                        //в какой выводим
    for (i=0;i<32769;i++)
        c[i]=ic[i]=dc[i]=inp[i]=0;
    printf("vvedite korrektnoe polozhitelnoe chislo\n");
    while((int(ch=getchar())!='\n'))                        // считывание вводимого числа
    {                                                       
        n++;                                        //количество цифр в числе
        inp[n]=ch;                                          
        if (inp[n]>96) inp[n]+=-87;                 //перевод малых английских в цифры
        if (inp[n]>64) inp[n]+=-55;                         //больших английских
        if (inp[n]>47) inp[n]+=-48; 
    }
 
    while (p!=n+1)                              //перевод в заданную систему счисления
    {
        inp[n+1]=0;                                         
        for(i=1;i<=n;i++)                                   
        {                                                   
            inp[i+1]=inp[i+1]+(inp[i]%base_out)*base_inp;   
            inp[i]=inp[i]/base_out;                         
        }                                                   
        c[k]=inp[n+1]/base_inp;                             
        if (!inp[p]) p++;                                   
        k++;                                                
    }
    while (c[k]==0) k--;                                    //убираем нули в начале
    for(i=k;i>-1;i--)                                       //вывод числа
        if (c[i]<10) printf("%c",(c[i])+48);
        else printf("%c",(c[i])+55);
    printf("\nvvedite sdvig\n");            
    scanf("%d",&d);
    printf("   ");
    for(i=k;i>-1;i--)                                       //сдвиг
    {
        ic[(i+d+100000*(k+1))%(k+1)]=c[i];                  //влево
        dc[(i-d+100000*(k+1))%(k+1)]=c[i];                  //вправо
    }                                   //100000 нужны, если сдвиг очень большой
 
    printf("\n<< \n");
    for(i=k;i>-1;i--)                                       //вывод сдвинутого влево
        if (ic[i]<10) printf("%c",(ic[i])+48);
        else printf("%c",(ic[i])+55);
    printf("\n>> \n");
    for(i=k;i>-1;i--)                                       //вывод сдвинутого вправо
        if (dc[i]<10) printf("%c",(dc[i])+48);
        else printf("%c",(dc[i])+55);
    getch();
}
Добавлено через 11 часов 51 минуту
Отвечу сам себе: возникало переполнение char'a, потому и работало некорректно. Заменил на int и всё стало как надо
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2012, 19:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изменение системы счисления (C++):

Программа обучения переводу чисел из десятичной системы счисления в 2 10 и 16 систем счисления - C++
дали задание составить программу нужно чтобы на экран выводилось это: Программа обучение переводу чисел из десятичной систем...

Простейший алгоритм перевода числа из 10 системы счисления в 16 ричную систему счисления - C++
Помогите написать самый простой алгоритм перевода из 10 системы счисления в 16 ричную систему счисления! Мне нужен именно самый простенький...

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

Перевод строки из 2-ной системы счисления в 8-ную систему счисления - C++
помогите пожалуйста как сделать перевод строки из 2 системы счисления на 8 систему счисления через массив ?

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

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2012, 19:09
Привет! Вот еще темы с ответами:

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

Перевод чисел из 16 системы счисления в 2 систему счисления - C++
Помогите составить программу для перевод чисел из 16 с/c в 2 c/c при условии,что программ может переводить и дробные числа.

С восьмеричной системы счисления в десятичную систему счисления - C++
Задание: Дана строка символов. Если он изображен целого числа в восьмеричной системе счисления, то перевести его в целое число в...

Системы счисления - C++
Реализовать модуль, обеспечивающий преобразование десятичных чисел в двоичные и наоборот. Двоичные числа хранить в виде массива целых...


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

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

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