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;
- // nowy typ danych
- // konstruktor, destruktor, operator = + >> <<
- // jedna cyfra to co najmniej jeden bajt
- // pięć linijek jednej liczby (ok 80 znaków), pięć drugiej, trzecia = 1 + 2, cout trzecia
- // http://www.cplusplus.com/forum/beginner/151124/ POMOCNY LINK
- class Big_number{
- friend ostream & operator<< (ostream & s1, Big_number & o1);
- friend istream & operator>>(istream & s1, Big_number & o1);
- char* number;
- public:
- Big_number(){
- number=NULL;
- }
- ~Big_number(){
- if (number!=""){
- delete [] number;
- number=NULL;
- }
- }
- Big_number(const char* o1){
- for (int i = 0; i < strlen(o1); i++){
- this->number[i] = o1[i];
- }
- }
- Big_number & operator=(const Big_number & o1){
- if (this->number!=NULL){
- delete [] number;
- number = NULL;
- }
- this -> number = new char[strlen(o1.number)];
- for (int i = 0; i< strlen(o1.number); i++){
- this->number[i]=o1.number[i];
- }
- return *this;
- }
- Big_number operator+(const Big_number &o1){
- int length1=strlen(this->number);
- int length2=strlen(o1.number);
- int max;
- Big_number added_number;
- if (length1>length2){
- max=length1;
- }
- else max=length2;
- if (max==length1){
- added_number=*this;
- for (int i = max-1; i>=0 ; i--){
- int liczba =int(this -> number[length1-1]) -'0';
- int dodawana;
- if (length2>0){
- dodawana = int(o1.number[length2-1]) -'0';
- }
- else dodawana=0;
- liczba = liczba+dodawana;
- length1--;
- length2--;
- if (liczba>9){
- liczba = liczba-10;
- char cyfra_powrotna = char(liczba)+'0';
- if (i-1>=0){
- added_number.number[i] = cyfra_powrotna;
- added_number.number[i-1]++;
- }
- else{
- added_number.number[i] = cyfra_powrotna;
- for (int j=max; j>0;j--){
- added_number.number[j]=added_number.number[j-1];
- }
- added_number.number[0]='1';
- }
- }
- else{
- char cyfra_powrotna = char(liczba)+'0';
- added_number.number[i]=cyfra_powrotna;
- }
- }
- }
- if (max==length2 && length1!=length2){
- added_number=o1;
- for (int i = max-1; i>=0 ; i--){
- int liczba =int(o1.number[length2-1]) -'0';
- int dodawana;
- if (length2>0){
- dodawana = int(this->number[length1-1]) -'0';
- }
- else dodawana=0;
- liczba = liczba+dodawana;
- length1--;
- length2--;
- if (liczba>9){
- liczba = liczba-10;
- char cyfra_powrotna = char(liczba)+'0';
- if (i-1>=0){
- added_number.number[i] = cyfra_powrotna;
- added_number.number[i-1]++;
- }
- else{
- added_number.number[i] = cyfra_powrotna;
- for (int j=max; j>0;j--){
- added_number.number[j]=added_number.number[j-1];
- }
- added_number.number[0]='1';
- }
- }
- else{
- char cyfra_powrotna = char(liczba)+'0';
- added_number.number[i]=cyfra_powrotna;
- }
- }
- }
- return added_number;
- }
- };//koniec Big_number
- istream & operator >> (istream & s1, Big_number & o1){
- if (o1.number != NULL) delete o1.number;
- string input;
- s1 >> input;
- o1.number = new char[input.size()+1];
- for (int i=0;i<input.size()+1;i++){
- o1.number[i]=input[i];
- }
- o1.number[input.size()+1]='\0';
- return s1;
- }
- ostream & operator <<(ostream & s1, Big_number & o1){
- for (int i = 0; i < strlen(o1.number); i++){
- s1 << o1.number[i];
- }
- s1 << endl;
- return s1;
- }
- int main(){
- Big_number a, b, c;
- cin >> a;
- cin >> b;
- cout <<"a= "<< a <<"b= " <<b;
- c=a;
- cout <<"c= "<< c <<"a= "<<a;
- c=a+b;
- cout <<"c=a+b= " <<c;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement