Программа на СИ++,подскажите,где ошибка...

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by A1exx, 9 Sep 2011.

  1. A1exx

    A1exx New Member

    Joined:
    8 Feb 2009
    Messages:
    24
    Likes Received:
    4
    Reputations:
    0
    Здравствуйте, начинающий в С++,необходимо было написать программу : "Разработать и написать программу перевода целых чисел из p-ичной системы счисления в десятичную. Основание р (1 < p < 16 ) и само число, состоящее не более чем из 6 цифр, вводятся с клавиатуры. Ниже приведен рекомендуемый вид экрана во время выполнения программы:

    Перевод заданного числа из р-ичной ССч в десятичную ССч
    Введите значение р (1<p<=16): 8
    Введите число для перевода: 2471
    Результат: 2471(8) ---> 1337(10)"

    Написал код,вы скажете,что криво,я соглашусь,но пытался я его доделать,как надо,чтобы всё работало,но не получилось избавиться от двух проблем....Помогите,пожалуйста...Первая проблема: при вводе p=16 и числа в 16-чной форме,например, 4D2,это число не переводит правильно,да и ваще переводит коряво...думал полдня....не додумался=((( Вторая проблема в проверке,которую я додумать ну нифига не могу...Проверка на принадлежность числа системе счисления... ну,напрмиер вводим p=13 и переводимое число 12 или 13,то выводило бы ошибку... или напрмиер p=9 и число 91,тоже должно выдать ошибку...

    Вот кривой код... :
    #include <iostream>
    using namespace std;
    int main()
    {
    int p;
    cout << "Translation of a given number of p-ary SSch in decimal SSch\n ";
    cout << "Please enter the p (1<p<=16) : ";
    cin >> p;
    char buf[50];
    cout << "Please enter the number for translation : ";
    cin >> buf;
    int i;
    i=0;
    while (buf!=0)
    {
    if (buf<'0' || buf>'9')
    {
    buf= buf-'A'+10;
    }
    else
    {
    buf= buf-'0';
    }
    i++;
    }

    int m,trans;
    m=1;
    trans=0;
    while (i > 0)
    { i--;

    trans=trans+(buf-'0')*m;
    m=m*p;

    }

    cout << buf;
    cout << "(" << p << ")" <<" ---> ";
    cout << trans << "(" << "10" << ")\n" ;
    return 0;

    }

    Помогите...заранее спасибо хоть за какой-то совет.
    P.S гуглил,читал,но не допоняла моя башка...