Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Numere mari  (Citit de 1969 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« : Septembrie 08, 2010, 08:19:07 »

Am vazut la cineva la operatiile pe numerele mari, ca in loc de add ( A, B ) , facea A += B. Cum as putea face si eu asa ? Merci  Thumb up
Memorat
MciprianM
Nu mai tace
*****

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« Răspunde #1 : Septembrie 08, 2010, 09:46:56 »

Se pare ca peste tot in liceu se "invata" C++, dar la sfarsit cam toata lumea stie doar C. Shocked
Supraincarci operatorii:
Cod:
void add(int A[], int B[])
{
      int i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}
struct BigInt{
   int a[128];
   void operator += ( BigInt x ){
        //cod pt adunare
          add(a,x.a);
  }
};
BigInt m, n;
int main(){
       m.a[0]=3;
       m.a[1]=2;
       m.a[2]=8;
       m.a[3]=4;
       n.a[0]=3;
       n.a[1]=6;
       n.a[2]=1;
       n.a[3]=9;
       m+=n;
       return 0;
}

Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #2 : Septembrie 08, 2010, 10:05:23 »

Eu nu invat C, eu fac Pascal la scoala, tot ce stiu ii de pe net  Dancing. Merci, intre timp am descoperit ca se poate si cu classes .

[LE] : Aici e o sursa care face adunarea pe numere mari, A + B :
Cod:
# include <iostream>
# include <vector>
using namespace std;

# define A ( *this )

class Mare : protected vector < int > {
public :
    Mare ( int ) ;
    void operator += ( Mare& ) ;
    void write ( void ) ;
};

Mare :: Mare ( int X ) {
    this -> resize ( 1000 ) ;
    for ( A[0] = 0; X ; X /= 10)
        A[++A[0]] = X % 10;
}

void Mare :: operator += ( Mare &B ) {
    int i, t = 0;

    for (i = 1; i <= A[0] || i <= B[0] || t; i++, t /= 10) {
        t += ( i <= A[0] ? A[i] : 0 ) + ( i <= B[0] ? B[i] : 0 ) ;
        A[i] = ( t ) % 10;
    }

    A[0] = i - 1;
}

void Mare :: write ( void ) {
    for ( int i = A[0]; i ; --i ) {
        printf ( "%d", A[i] ) ;
    }
}

int main ( void ) {
    Mare a = ( 15 ) , b ( 21 ) ;
    a += b ;
    a.write () ;

    return 0 ;
}
« Ultima modificare: Septembrie 08, 2010, 13:51:29 de către Simoiu Robert » Memorat
andunhill
Vorbaret
****

Karma: 12
Deconectat Deconectat

Mesaje: 183



Vezi Profilul
« Răspunde #3 : Septembrie 09, 2010, 00:11:56 »

Daca tot veni vorba de numere mari , am implementat varianta http://infoarena.ro/lucrul-cu-nr-mari de la scaderea a 2 nr mari numai ca rezultatul il tin in alt vector. Problema e ca daca sriu asa:
Cod:
rez[i]+=( ( t = ( ( rez[i] = q[i] - n[i] - t ) < 0 ? 1 : 0 ) ) > 0 ? 10 : 0 );
imi afiseaza aiurea insa iau 100 pt pe infoarena.
Iar daca scriu
Cod:
sol=( t = ( ( rez[i] = q[i] - n[i] - t ) < 0 ? 1 : 0 ) ) > 0 ? 10 : 0 ;
rez[i]+=sol;
imi da corect. Care poate fi problema?
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #4 : Septembrie 09, 2010, 12:02:27 »

Si eu am intalnit aceeasi problema, insa mie imi afiseaza pe PC bine, si pe IA iau 0 pct. Nu stiu exact problema ....
Memorat
andunhill
Vorbaret
****

Karma: 12
Deconectat Deconectat

Mesaje: 183



Vezi Profilul
« Răspunde #5 : Septembrie 09, 2010, 13:33:30 »

poate la mine mingW-u are un bug. Dar nu imi explic dc nu afiseaza bine.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines