infoarena

infoarena - concursuri, probleme, evaluator, articole => Teme => Subiect creat de: paul calburean din Februarie 15, 2008, 17:49:16



Titlul: numere foarte mari [150-200 numere]
Scris de: paul calburean din Februarie 15, 2008, 17:49:16
este vorba de acele numere extrem de mari care pot fi prelucrate doar cu vectori.

In fisierul numere.txt se afla pe cate un rand 2 numere pana in 200 cifre.
Sa se calculeze suma lor.

intrebare: cum pot lua doar cate o cifra dintr-un sir de numere ?

ex:
sir: 202215748421868421567865461324
vreau sa pun intr-o variabila a pe 2,apoi pe 0,apoi pe 2, si tot asa ;



ceva sfaturi !?  :-s :?


Titlul: Răspuns: numere foarte mari [150-200 numere]
Scris de: Alexandru Pana din Februarie 15, 2008, 18:04:14
Depinde .. daca sirul il citesti din fisier poti citi caracter cu caracter scanf("%c",&c) si apoi sa pui in a c-'0' (c++), apoi iti construiesti sirul, si accesezi cifra cu sir [ x ] unde x e pozitia. Pentru operatii pe numere mari cauta aici (http://infoarena.ro/multe-smenuri-de-programare-in-cc-si-nu-numai)


Titlul: Răspuns: numere foarte mari [150-200 numere]
Scris de: Sima Cotizo din Februarie 15, 2008, 19:10:22
caracter cu caracter scanf("%d",&c)
Cod:
scanf("%c", &c);
:-'

Daca lucrezi in c++ poti folosi si fgets (http://www.cplusplus.com/reference/clibrary/cstdio/fgets.html)(vector, nr_max_caractere, fisier); Trebuie sa ai grija ca iti citeste si '\n' de la sfarsit, deci cand vrei sa vezi lungimea sirului (sa ii zicem s) faci n = strlen (http://www.cplusplus.com/reference/clibrary/cstring/strlen.html)(s)-1; sau, mai sigur,
Cod:
while ( s[n]<'0' || s[n]>'9' ) n--; 

Daca lucrezi in pascal poti citi intr-un string (ca ai zis ca sunt maxim 200 de cifre), cu readln (http://www2.toki.or.id/fpcdoc/ref/refsu153.html#x238-24400013.3)(s); Ca sa faci conversia poti face ord (http://www2.toki.or.id/fpcdoc/ref/refsu142.html#x227-23300013.3)() pe fiecare element (care iti intoarce codul ASCII) si din care scazi valoarea lui '0' (ord('0') mai exact). Apoi uite-te pe linkul dat de AleX., gasesti acolo op pe nr mari.


Titlul: Răspuns: numere foarte mari [150-200 numere]
Scris de: Alexandru Pana din Februarie 15, 2008, 19:31:44
caracter cu caracter scanf("%d",&c)
Cod:
scanf("%c", &c);
:-'
:oops: am modificat ..

Am intalnit probleme cu '\n'-ul si fgets() sau fread(), avand in vedere ca newline are 2 caractere .. strlen(s)-2 in cazul acela.


Titlul: Răspuns: numere foarte mari [150-200 numere]
Scris de: Stefan Istrate din Februarie 15, 2008, 19:45:23
Am intalnit probleme cu '\n'-ul si fgets() sau fread(), avand in vedere ca newline are 2 caractere .. strlen(s)-2 in cazul acela.
Newline e un singur caracter, nu 2. In limbaj il reprezinti tu cu 2 simboluri, dar el are codul ASCII 10.


Titlul: Răspuns: numere foarte mari [150-200 numere]
Scris de: paul calburean din Februarie 15, 2008, 19:56:37
sar'mana :D


Titlul: Răspuns: numere foarte mari [150-200 numere]
Scris de: Alexandru Pana din Februarie 15, 2008, 22:30:39
Am intalnit probleme cu '\n'-ul si fgets() sau fread(), avand in vedere ca newline are 2 caractere .. strlen(s)-2 in cazul acela.
Newline e un singur caracter, nu 2. In limbaj il reprezinti tu cu 2 simboluri, dar el are codul ASCII 10.

Dap, am ametit-o putin, strlen() returneaza lungimea, deci ultimul element se afla pe pozitia strlen()-1. Daca se termina in '\n' ultimul element e strlen()-2. Stringurile incep de la 0  :-'


Titlul: Răspuns: numere foarte mari [150-200 numere]
Scris de: Valentin Stanciu din Februarie 16, 2008, 14:27:05
Am intalnit probleme cu '\n'-ul si fgets() sau fread(), avand in vedere ca newline are 2 caractere .. strlen(s)-2 in cazul acela.
Newline e un singur caracter, nu 2. In limbaj il reprezinti tu cu 2 simboluri, dar el are codul ASCII 10.

Te contrazic. Depinde de sistemul de operare in care a fost creeat fisierul de intrare. In Windows sfarsitul de linie este 0x0D0A. Adica ASCII 13 si ASCII 10. In Linux (Unix) ai doar 0x0A.
Este adevarat ca exista si programe de windows care pot salva in format Unix si vice-versa.


Titlul: Răspuns: numere foarte mari [150-200 numere]
Scris de: Savin Tiberiu din Februarie 16, 2008, 17:41:50
ca sa nu ai probleme poti sa faci asa :
Cod:
for (i=0;s[i]>='0'&&s[i]<='9';i++)
L=i-1;

si in felul asta nu mai ai probleme nici cu spatiile nici cu newline-rile nici cu nimic.