(C++) wczytywanie 1000-cyfowej liczby z pliku

0

Jak wczytac, z pliku tekstowego, do tablicy 1000-cyfrową liczbę całkowitą, gdzie każda komórka tablicy będzie zawierac jedną cyfrę? Nie mogę znaleźc jednoznacznej odpowiedzi.

1

normalnie, jak stringa, albo jak dane binarne, zależnie w jaki sposób ta liczba jest zapisana.

0

zapisana jest jako ciąg cyfr "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984..................."

0

Czyli wczytujesz jako stringa, i on będzie tą twoją tablicą. Ew możesz z niego po elemencie do tablicy kopiować, ale biorąc pod uwagę że można się do niego odwoływać jak to tablicy nie widzę takiej potrzeby.

0

Czyli:

 
        string s;
	fstream liczba;
	liczba.open("liczba.txt");
	while (!liczba.eof()) {
		liczba >> s;
	}
	liczba.close();

?

0

odejmij od każdego wczytanego znaku 0x30, lub nałóż maskę & 0xf

0

Przepraszam nie za bardzo rozumiem jak to zrobic i przede wszystkim po co?

0

Proszę pytanie, prosta odpowiedź. To zalezy co chcesz z tym zrobić.

0
d00d napisał(a):

Przepraszam nie za bardzo rozumiem jak to zrobic i przede wszystkim po co?

Jeśli chcesz na wczytanej liczbie przeprowadzać operacje arytmetyczne to Ci się przyda.

Jeśli chcesz po prostu mieć aplikację, a nie męczyć się z programowaniem dodawania, odejmowania itd. w C++, to użyj np. typu long w Python'ie.

l1=5434354354543435435454343543545434354354543435435454343543547988984654561231231564984L
l2=45669844566984456698445669844566984456698445669844566984456698445669845434354354543435435454343543L
print(l1+l2)
print(l1-l2)
print(l1*l2)

Liczbę z pliku wczytasz tak:

plik=open("plik.txt","r")
dane=plik.read()
liczba=long(dane.strip())
plik.close()
print (liczba)
1
// C++11
// C++11
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::vector<char> vecNumber;
    std::ifstream fin("file.txt");
    if (!fin.is_open())
        return 1;
    std::copy(std::istream_iterator<char>(fin), std::istream_iterator<char>(), std::back_inserter(vecNumber));
    vecNumber.erase(std::remove_if(vecNumber.begin(), vecNumber.end(), [](char c) { return c < '0' || c > '9'; }), vecNumber.end());
    std::for_each(vecNumber.begin(), vecNumber.end(), [](char& c) { c -= '0'; });
}
0
string liczba;
ifstream("nazwa_pliku") >> liczba;

W łańcuchu znajdzie się zbiór wczytanych znaków.

Znak cyfry '0' jest reprezentowany przez liczbę 48, znak cyfry '1' to liczba 49 i tak dalej (kody ascii). Aby zamienić znak cyfry na wartość liczbową jaką ta cyfra reprezentuje odejmij od znaku '0' np.

char znak = '5';
cout << znak; // wypisze znak '5'
cout << (int)znak; // wypisze liczbę 53 bo znak cyfry '5' jest reprezentowana właśnie przez liczbę 53

// zamieniamy znak reprezentujący cyfrę na wartość liczbową tej cyfry
int liczba = znak - '0';
cout << liczba; // wypisze liczbę 5 bo wyliczyliśmy:  '5' - '0' = 53 - 48 = 5

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