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

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

Войти
Регистрация
Восстановить пароль
 
kenny58
0 / 0 / 0
Регистрация: 21.02.2011
Сообщений: 19
#1

Из 2ой в 10ую - C++

12.05.2012, 20:50. Просмотров 763. Ответов 11
Метки нет (Все метки)

Помогите, никак не догоню

Задано неотрицательное целое число в двоичной системе счисления. Требуется перевести его в десятичную.

Ввод
В первой строке содержится исходное число не более чем из 50 000 цифр 0 и 1 без ведущих нулей.
Вывод
Вывод должен содержать это число в десятичной системе счисления без ведущих нулей.

Ввод
101
Вывод
5
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2012, 20:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из 2ой в 10ую (C++):

Программа которая переводит из 2ой системы в 10ую - C++
Создать программу которая переводит из двоичной системы в десятичную. P.S вообще то я знаю как переводить 2ую в 10ую, ну например -...

Нужна помощь! Перевод из 16ричной сс в 10ую сс - C++
Я начинающий программист и столкнулся с такой задачкой. Есть файл с расширением .dat, при открытии его в hex редакторе,мы имеем стандартную...

В строке с++ у каждого слова удалить 2ой символ - C++
В строке с++ у каждого слова удалить 2ой символ Например я ввожу: oipu hkuj dfta dnkj Должно вывести: opu huj dta dkj

В матрице А(3,3) найти максимальный элемент 2ой строки, удв усл -1,2<А2j<4,7 - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; int main ( ) { double A; int i,j,jmax; for...

Создать функцию, меняющую местами в одномерном массиве 1ый элемент с последним, 2ой с предпоследним и т.д - C++
Здравствуйте, форумчане. Создать функцию, меняющую местами в одномерном массиве 1ый элемент с последним, 2ой с предпоследним и т.д.....

Код перевода из 16ой в 10ую СС. - Delphi
Ребят застрял в коде перевода из 16ой СС в 10ую... мне нужно именно этот код довести до ума без использования функции... только в...

11
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
12.05.2012, 20:53 #2
задачу взяли с acm.sgu.ru/ ?
0
kenny58
0 / 0 / 0
Регистрация: 21.02.2011
Сообщений: 19
12.05.2012, 20:58  [ТС] #3
нет, препод по языкам дал, говорит кто к понедельнику покажет, тот молодец
0
zss
Модератор
Эксперт С++
6569 / 6131 / 2021
Регистрация: 18.12.2011
Сообщений: 15,982
Завершенные тесты: 1
12.05.2012, 21:03 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int BinstringToInt(char *bin)
{
   int p2=1;
   int iend=strlen(bin)-1;
   int res=bin[iend];
   for(int i=iend-1;i>=0;i--)
   {
         p2*=2;
         res+=p2*bin[i];        
   }
   return p2;
}
int main()
{
     char ss[50000]="1111000110011";
     int r=BinstringToInt(ss);
     char decimal[100];
     itoa(r,decimal,10);
}
кстати тема перевода многократно обсуждалась, например:
Перевод чисел из любой сс в любую
1
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
12.05.2012, 21:10 #5
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
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <fstream>
#include <algorithm>
#include <utility>
#include <stdio.h>
#include <conio.h>
#include <cmath>
using namespace std;
int sp(int j){
    int k=1;
    for (int i=0;i<j;i++)
    k*=2;
    return k;
};
int main(){
    vector <int> ch;
    char x;
    ifstream in("input.txt");
    while (in>>x) {ch.push_back(x-48);};
    int ans=0;
    reverse(ch.begin(),ch.end());
    for (unsigned int i=0;i<ch.size();i++)
        ans+=ch[i]*sp(i);
    cout<<ans;
    getch();
    return 0;
};
1
Evg
Эксперт CАвтор FAQ
18370 / 6417 / 441
Регистрация: 30.03.2009
Сообщений: 17,799
Записей в блоге: 28
13.05.2012, 13:00 #6
Оба предложенных варианта не удовлетворяют постановке задачи. Введите туда двоичное число размером в 1000 символов - и программа не отработает

Работающий исходник см. тут: Перевод чисел из одной системы счисления в другую
Только нужно в main строковые буфера достаточного размера сделать. И переименовать имя функции conv_dec_to_bin и комментарий к ней, т.к. изначально она переводила из 10 в 2, а потом переделал на из любой в любую
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.05.2012, 13:08 #7
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <bitset>
 
int main()
{
    const char * str = "101";
    std::cout << std::bitset< 64 > (str).to_ulong();
}
Хотя нет, для 50к цифр работать не будет...
Можно без проблем написать на стандартной джаве, либо использовать либы вроде gmp.
Если делать самому, то это довольно сложная задача на длинную арифметику.
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 13:13 #8
Забыл на ограничения посмотреть =(
На JAva есть длинная арифметика +1 (я slowpoke)
Но на самом деле тут достаточно просто 2 функции взять :
1) возведение двойки в степень (длинное число)
2) сложение 2 длинных чисел
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.05.2012, 13:17 #9
Так с помощью gmp можно сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <gmp.h>
 
int main()
{
    const char * str = "101";
    
    mpz_t x;
    mpz_init(x);
    
    mpz_set_str(x, str, 2);
    
    gmp_printf("%Zd\n", x);
}
Добавлено через 2 минуты
А так - на Java
Java
1
2
3
4
5
6
7
8
9
10
import java.math.BigInteger;
 
public class Main
{
    public static void main(String[] args)
    {
        String str = "101";
        System.out.println( new BigInteger(str, 2) );
    }
}
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 13:18 #10
diagon, А где взять gmp ? http://gmplib.org/ ? Это не стандартная либа?
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.05.2012, 13:20 #11
Цитата Сообщение от Ternsip Посмотреть сообщение
А где взять gmp ? http://gmplib.org/ ?
Да, тут.

Цитата Сообщение от Ternsip Посмотреть сообщение
Это не стандартная либа?
Нет, не стандартная, нужно ставить самостоятельно.
0
Evg
Эксперт CАвтор FAQ
18370 / 6417 / 441
Регистрация: 30.03.2009
Сообщений: 17,799
Записей в блоге: 28
13.05.2012, 15:21 #12
java, gmp...
Господа, смысл задачи в том, чтобы самому всё это сделать, а не использовать готовые библиотечные решения
0
13.05.2012, 15:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2012, 15:21
Привет! Вот еще темы с ответами:

Написать программу перевода из 8ой в 10ую сс и обратно - Pascal
Вводится строка изображающая вещественное число в 8ой СС. Необходимо преобразовать эту строку в десятичное вещественное число, вывести...

Умножение чисел в 2ой СС - Delphi
Помогите пожалуйста с программой.Необходимо чтобы программа выполняла данный алгоритм : Переводила введенные множетили из 10ой СС в 2ую,...

перевод из 2ой СС в 10СС - Pascal
програма перевода из 2oй в 10ю сс!:help:

Не видит 2ой HDD - Жесткие диски
Доброй ночи всем. У меня проблема, после пере установки Windows 7( перешел с HP,на Макс), перестал отображаться 2ой диск, при этом интел...


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

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

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