2014-01-25 3 views
1

Возможно, вы знакомы с представлением целых чисел со знаком. Это бинарное целочисленное представление, наиболее широко используемое сегодня. Менее известны некоторые другие предложения для двоичного целочисленного представления, включая базу -2. Base -2 разделяет арифметические удобства двухкомпонента и, возможно, проще описать. (См. http://en.wikipedia.org/wiki/Signed_number_representations)Преобразование из двоичного дополнения в десятичное.

Пример: 1011 - 1 * (- 2)^3 + 0 * (- 2)^2 + 1 * (- 2)^1 + 1 * (- 2) * 0 = - 8 + 0 + -2 + 1 = -9

Входной

Первое число Т (от 1 до 100) это количество целых чисел для преобразования из базы -2 основывать 10.

следующие T-номера - это базовые -2 числа (от 1 до 15 цифр).

Примечание: номера могут быть дополнены слева с помощью 0s.

Выход

Выход подписанный основание 10 представление чисел, разделенных пробелами.

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

#include<iostream> 
#include<math.h> 
using namespace std; 
long long int convert (long long int base, long long int num){ 
long long int exp=0; 
long long int output=0; 
while (num != 0){ 
    long long int digit = num - 10*int(num/10); 
    output += digit * pow(base, exp); 
    exp++; 
    num = int(num/10); 


} 
return output; 
} 
int main(){ 
int cases; 
cin >> cases; 
long long int input; 
long long int base = -2; 
cin >> input; 
cout << convert(base, input); 
for (int i=1; i< cases; i++){ 
    cin >> input; 
    cout << " " << convert(base, input); 
} 

return 0; 
} 

ответ

2

Число - это абстрактное понятие, выражающее (например) пальцами.

Арифметика инструктирует о представлении этого абстрактного номера различными способами, называемыми системами нумерации.

Таким образом, число может быть отображено в строку цифр или в последовательность чисел, если вам больше нравится.

Функция, которую вы определили, принимает число и базу и преобразует ее в число. Таким образом, это не дает представление этого числа в виде последовательности цифр.

+0

George: Я не понимаю. Я должен преобразовать входные данные от основания -2 к основанию 10. Что случилось с печатью числа (в базе 10)? – user3213711

+0

Может быть, я не понял, что нужно. Не могли бы вы объяснить мне, какой вклад у вас есть и какой результат вам нужен? –

+0

@George: это автоматическое упражнение по программированию. Помимо описания в вопросе, вы не знаете, что такое вход. Ваша программа запускается на какой-либо машине, которую вы не контролируете. –

2

Так как вы говорите, это лучший думаю, чтобы прочитать вопрос:

«Первое число T (от 1 до 100) это количество целых чисел, чтобы преобразовать от основания -2 до основания 10.» Кажется, что для преобразования существует целое число целых чисел.

«Следующие номера T являются базовыми -2 цифрами».

Таким образом, есть числа T, которые следует интерпретировать в базе -2.

«Каждый из них имеет от 1 до 15 цифр.»

«Примечание: номера могут быть дополнены по левому 0s»

«Выход

Выход подписанную основание 10 представление чисел, разделенных пробелами.»

Итак, у вас есть значение T, которое имеет значение. Скажем, например, что это 34. Ате, что у вас есть 34 числа в базе -2. Каждый из них имеет от 1 до 15 цифр. Они могут быть заполнены слева 0.

Итак, вы должны выбрать представление каждого номера (будет ли оно строкой?).

Вы должны преобразовать эти 34 числа, представленные в основании -2, в основание 10 и отделить 34 числа пробелом.

Смежные вопросы