online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
#include <iostream> #include "bignum.h" using namespace std; int main() { try { bignum a; std::cout<<'\n'<<std::string(50,'_')<<endl; bignum b("-345"); std::cout<<'\n'<<std::string(50,'_')<<endl; bignum c("4567"); std::cout<<'\n'<<std::string(50,'_')<<endl; bignum d("7891"); std::cout<<'\n'<<std::string(50,'_')<<endl; // bignum d("4-567"); std::cout<<'\n'<<std::string(50,'_')<<endl; cout<<"this ->"<<b+c<<"<-wynik"<<endl; ///wynik 4912 std::cout<<'\n'<<std::string(50,'_')<<endl; cout<<"this ->"<<d+c<<"<-wynik"<<endl; ///wynik 12458 } catch(bignum) { exit(-1); } catch(bignum::formaterr) { exit(-2); } catch(...) { exit(-3); } return 0; }
#include "bignum.h" #define o(x) std::cout<<'\n'<<#x<<'='<<x<<std::endl; std::string filename() { size_t pozslash=std::string(__FILE__).rfind('/'); if((pozslash+1)) return std::string(__FILE__).substr(pozslash+1); size_t pozbackslash=std::string(__FILE__).rfind('\\'); if((pozbackslash+1)) return std::string(__FILE__).substr(pozbackslash+1); return std::string(__FILE__); } size_t errornr{}; std::string clnam(const std::string& s="") {return s.size()? " in class "+s+' ':""; } #define err(class) std::cout<<'\n'<<std::string(50,'v')<<'\n'<<"ERROR "<<filename()<<"<- error nr "<<errornr++ <<clnam(#class)<<'\n'<<std::string(50,'^')<<std::endl;// #define o(x) std::cout<<'\n'<<#x<<'='<<x<<std::endl; using std::cout; using std::endl; bignum::bignum(const std::string& longnum):size{longnum.size()} { o(size); errornr=0; switch(longnum.find('-')) { case 0: o("ujemna liczba"); sign='-'; size--; break; case static_cast<size_t>(-1): o("dodatnie"); break; default: correct = false; err(bignum); std::cerr<<"bledna liczba 1"<<std::endl; // exit(-1); throw formaterr(); break; } // std::cout<<longnum.size()<<")."; if(longnum.size()) ptrlgnr=new char[longnum.size()] {}; if(ptrlgnr) for(auto it=longnum.cbegin(), end=longnum.cend(),last=end-1; it!=end; it++) { switch(*it) { case '0' ... '9': ptrlgnr[last-it]=*it-'0'; break; case '-': ptrlgnr[last-it]=*it; break; case 0: ptrlgnr[last-it]=*it; break; default: correct=false; err(bignum); std::cout<<*it+'0'<<'|'; std::cerr<<"bledna liczba 2"<<std::endl; // throw formaterr::ferr; break; } } for(size_t i=0; i+1<longnum.size(); i++) std::cout<<static_cast<short>(ptrlgnr[i])<<'\t'; char lastdigit=ptrlgnr[longnum.size()-1]; if(lastdigit=='-') std::cout<<static_cast<char>(lastdigit)<<'\t'; else std::cout<<static_cast<short>(lastdigit)<<'\t'; std::cout<<std::endl; std::cout<<'\n'<<std::string(50,'?')<<"\nkoniec konstruktora size="<<size<<'\n'<<std::string(50,'?')<<std::endl; } bignum::~bignum() { if(ptrlgnr) delete[]ptrlgnr; o("usuniento") } //bignum::bignum(const bignum& other) { // //} bignum& bignum::operator=(const bignum& rhs) { if(this == &rhs) return *this; // handle self assignment //assignment operator return *this; } bignum operator + (const bignum& lhs,const bignum& rhs) { char flag =(lhs.size>rhs.size)?1:0; size_t size=(lhs.size>rhs.size)?lhs.size:rhs.size; bignum* ptr=new bignum{std::string(size+1,char{})}; switch(flag) { case 1: { ptr->add(lhs,rhs, ptr); break; } case 0: { ptr->bignum::add(rhs,lhs, ptr); break; } default: err(bignum); } return *ptr; } std::ostream & operator << (std::ostream & os, const bignum & bn) { size_t tabsize=bn.size; char * tab = bn.ptrlgnr; os<< tabsize<<"\t"; for(size_t i=tabsize-1; i<tabsize; i--) os<<(short)tab[i]<<' '; return os; } void bignum::add(const bignum & ptrbigger,const bignum &ptrlower, bignum* ptr) { size_t bigger = ptrbigger.size; size_t lower = ptrlower.size; char mem{}; size_t i=0; /// for(; i+lower<bigger; i++) { // pamienta� by sumowa� przy size_t -> i<bigger-lower <-tak pentla niesko�czona for(; i<lower; i++) { // o((int)ptrbigger.ptrlgnr[i])o((int)ptrlower.ptrlgnr[i])o(ptrbigger.ptrlgnr[i]+ptrlower.ptrlgnr[i])o(ptrbigger.ptrlgnr[i]+ptrlower.ptrlgnr[i]+mem) mem=ptrbigger.ptrlgnr[i]+ptrlower.ptrlgnr[i]+mem; ptrlgnr[i]=mem%10; // o((int)mem) mem/=10; // o((int)mem) } while(mem) if(i<bigger) { mem=ptrbigger.ptrlgnr[i]+mem; ptr->ptrlgnr[i]=mem%10; mem/=10; i++; } else { ptr->ptrlgnr[i]=1; //mem%10=1; break; } for(; i<bigger; i++) { ptr->ptrlgnr[i]=ptrbigger.ptrlgnr[i]; } if(!mem) size--; //je�eli pierwsze 0 }
#ifndef BIGNUM_H #define BIGNUM_H #include <iostream> class bignum { public: bignum(const std::string& longnum = "0"); bignum& operator=(const bignum& other); virtual ~bignum(); // size_t Getm_Counter() { return m_Counter; } // void Setm_Counter(unsigned int val) { m_Counter = val; } void setnumtab(char* tabnum,size_t tabnumsize) { ptrlgnr=tabnum; size=tabnumsize; } struct formaterr {static formaterr ferr;}; private: friend bignum operator + (const bignum& lhs,const bignum& rhs); friend std::ostream & operator << (std::ostream & os, const bignum & bn); // bignum(const bignum& other); // size_t m_Counter; size_t size; char * ptrlgnr{nullptr}; char sign{}; bool correct =true; void add(const bignum & ptrbigger,const bignum &ptrlower, bignum* ptr); }; #endif // BIGNUM_H

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue