Zamiana liczb binarnych na decymalne

0

Cześć,
zadanie 4 z matury 2015 z informatyki.

W zamianie na decymalne jest jakiś błąd, którego nie mogę wyłapać. Zrobiłem już to zadanie w inny sposób, ale ta wersja nie daje mi spokoju.
Widzicie błąd?

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main()
{
    ifstream myfile("liczby.txt");
    if( !myfile.is_open() || !myfile.good() ){
        cout << "ERROR!"; exit(0);
    }

    long long unsigned suma=0, w=0, m=0;	//w-największa liczba; m-najmniejsza liczba
    unsigned short najm=1, najw=1, linia=1;		//najm-nr linii najmniejszej liczby; najw-nr linii największej liczby 
    string liczba;

    unsigned short ile2=0, ile8=0;

    while( myfile >> liczba ){
        suma=0;
        unsigned short potega = liczba.length();

        for(short i=0; i<potega; i++){
            if(liczba[i] == '1'){
                suma += pow(2,potega-i-1);
            }
        }

        if(linia==1) { m = w = suma; }

        if( suma%2 == 0 )   ile2++;
        if( suma%8 == 0 )   ile8++;
        if( suma > w )	{ w=suma; najw=linia; }
        if( suma < m )	{ m=suma; najm=linia; }
        linia++;
    }

    cout << "Przez 2: " << ile2 << endl;
    cout << "Przez 8: " << ile8 << endl;
    cout << "Najwieksza: " << najw << endl;
    cout << "Najmniejsza: " << najm << endl;

    myfile.close();
    return 0;
}
2

Każda liczba binarna zawiera co najwyżej 250 cyfr binarnych,

Jak Ci się wydaje, czy 64-bitowy unsigned long long zmieści liczbę złożoną z 250 bitów?

W ogóle w tym zadaniu nie ma przecież potrzeby zamiany niczego na system dziesiętny - podejdź do tego z głową, nie na pałę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1