Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- using namespace std;
- //klasy pochodne, protected (jak private, tylko ze dostepne dla klas pochodnych),
- //klasa pochodna do klasy DL, operator *, ==, !=, >,<
- // http://www.cplusplus.com/forum/beginner/151124/ POMOCNY LINK
- class duzaLiczba{
- protected:
- friend ostream & operator<< (ostream & s1, duzaLiczba & o1);
- friend istream & operator>>(istream & s1, duzaLiczba & o1);
- char* wsk;
- public:
- duzaLiczba(){
- wsk=NULL;
- }
- ~duzaLiczba(){
- if (wsk!=""){
- delete [] wsk;
- wsk=NULL;
- }
- }
- duzaLiczba(const char* o1){
- if (this->wsk!=NULL){
- delete [] this->wsk;
- this->wsk=NULL;
- }
- this->wsk=new char[strlen(o1)];
- for (int i = 0; i < strlen(o1); i++){
- this->wsk[i] = o1[i];
- }
- }
- duzaLiczba & operator=(const duzaLiczba & o1){
- if (this->wsk!=NULL){
- delete [] this->wsk;
- this->wsk=NULL;
- }
- this -> wsk = new char[strlen(o1.wsk)-1];
- for (int i = 0; i< strlen(o1.wsk); i++){
- this->wsk[i]=o1.wsk[i];
- }
- return *this;
- }
- duzaLiczba operator+(const duzaLiczba &o1){
- int length1=strlen(this->wsk);
- int length2=strlen(o1.wsk);
- int maxl, add1, add2,add=0;
- static duzaLiczba wynik;
- if (length1>length2) maxl=length1;
- else maxl=length2;
- if (o1.wsk[0]-'0'+this->wsk[0]-'0'+1>10) wynik.wsk=new char[maxl+1];
- else wynik.wsk=new char[maxl];
- for (int i=maxl+1;i>0;i--){
- add1=0;
- add2=0;
- if (length1>0) add1=this->wsk[length1-1]-'0';
- if(length2>0) add2=o1.wsk[length2-1]-'0';
- add1=add1+add2+add;
- add=0;
- if(add1>9){
- add=1;
- add1=add1%10;
- }
- wynik.wsk[i-1]=add1+'0';
- length1--;
- length2--;
- }
- wynik.wsk[maxl+1]='\0';
- return wynik;
- }
- };//koniec duzaLiczba
- istream & operator >> (istream & s1, duzaLiczba & o1){
- if (o1.wsk != NULL) delete o1.wsk;
- string input;
- s1 >> input;
- o1.wsk = new char[input.size()+1];
- for (int i=0;i<input.size()+1;i++){
- o1.wsk[i]=input[i];
- }
- o1.wsk[input.size()+1]='\0';
- return s1;
- }
- ostream & operator <<(ostream & s1, duzaLiczba & o1){
- int i=0;
- if (o1.wsk[0]='0') i=1;
- for (; i < strlen(o1.wsk); i++){
- s1 << o1.wsk[i];
- }
- s1 << endl;
- return s1;
- }
- class duzaLiczba2: public duzaLiczba {
- public:
- duzaLiczba2():duzaLiczba() {}
- ~duzaLiczba2(){
- if (wsk!=""){
- delete [] wsk;
- wsk=NULL;
- }
- }
- duzaLiczba2 (const duzaLiczba2 &o1):duzaLiczba(o1){
- if (this->wsk!=""){
- delete [] this->wsk;
- this->wsk=NULL;
- }
- this->wsk=new char[strlen(o1.wsk)-1];
- for (int i=0; i<strlen(o1.wsk); i++) this->wsk[i]=o1.wsk[i];
- }
- duzaLiczba2 & operator= (duzaLiczba2 const &o1){
- int i;
- duzaLiczba2 wynik;
- if(this != &o1){
- delete [] this->wsk;
- int len=strlen(o1.wsk);
- this->wsk= new char[len];
- for(i=0;i<len;i++){
- this->wsk[i]=o1.wsk[i];
- }
- }
- return *this;
- }
- /*duzaLiczba2 &operator * (const duzaLiczba &o1){
- int a=strlen(o1.wsk),b=strlen(this->wsk);
- duzaLiczba2 wynik;
- wynik.wsk = new char[a+b-1];
- int add,c;
- if (a>b){
- for (int i=0; i<b;i++){
- for (int j=0;j<a;j++){
- c=(this->wsk[j]-'0')*(o1.wsk[i]-'0');
- wynik.wsk[i]=(((c%10)+(wynik.wsk[i]-'0'))%10)+'0';
- if ((c%10)+(wynik.wsk[i]-'0')>9)
- }
- }
- }
- }*/
- bool operator == (const duzaLiczba2 &o1){
- if (strlen(this->wsk)!=strlen(o1.wsk)) return false;
- for (int i=0;i<strlen(o1.wsk);i++){
- if (o1.wsk[i]!=this->wsk[i]) return false;
- }
- return true;
- }
- bool operator != (const duzaLiczba2 &o1){
- if (strlen(this->wsk)!=strlen(o1.wsk)) return true;
- for (int i=0;i<strlen(o1.wsk);i++){
- if (this->wsk[i]==o1.wsk[i]) return false;
- }
- return true;
- }
- bool operator > (const duzaLiczba2 &o1){
- if (strlen(this->wsk)>strlen(o1.wsk)) return true;
- if (strlen(this->wsk)<strlen(o1.wsk)) return false;
- for (int i=strlen(o1.wsk)-1; i>=0 ;i--){
- if (o1.wsk[i] > this->wsk[i]) return false;
- }
- if (o1.wsk[0]==this->wsk[0]) return false;
- return true;
- }
- bool operator < (const duzaLiczba2 &o1){
- if (strlen(this->wsk)<strlen(o1.wsk)) return true;
- if (strlen(this->wsk)>strlen(o1.wsk)) return false;
- for (int i=strlen(o1.wsk)-1; i>=0 ;i--){
- if (o1.wsk[i] < this->wsk[i]) return false;
- }
- if (o1.wsk[0]==this->wsk[0]) return false;
- return true;
- }
- };
- int main(){
- duzaLiczba a, b, c;
- cin >> a;
- cin >> b;
- c=a+b;
- cout<<c;
- //if (a<b) cout<<"nie";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement