Untitled
unknown
plain_text
2 years ago
9.5 kB
5
Indexable
#include <iostream> #include<vector> #include<string> using namespace std; void add(int[],int[],int,string base_k,int a[],int&lengtha,int&lengthb); void sub(int[],int[],int,string base_k,int a[],int&lengtha,int&lengthb); void mult(int[],int[],int,string base_k,int a[],int&lengtha,int&lengthb); int inputnum(int[],int[],string,int&lengtha,int&lengthb); int detectposition(int answer[]); bool detectcarry(int answer[],string base_k); bool detectminus(int [201]); int main() { string base_k;string option; int a[201]={0};int b[201]={0};int largenum;int answer[201]={0};int lengtha;int lengthb; do { cout << "----Welcome to big number calculator----" << endl; cout << "------------------------------------------------" << endl; do//find base { cout << "Please enter the base-k of the number (2<=k<=16)" << endl; cout << "base-k = "; getline(cin,base_k); if(base_k.length()>2) { cout << "Error! Please try again." << endl; continue; } if(stoi(base_k)>16||stoi(base_k)<2)//wrong input need to use array receive base_k { cout << "Error! Please try again." << endl; continue; } break; }while(true);//wrong input cout << "------------------------------------------------" << endl; do { cout << "Please choose the function" << endl; cout << "1.Addition" << endl; cout << "2.Subtraction" << endl; cout << "3.Multiplication" << endl; cout << "0.Exit" << endl; cout << "------------------------------------------------" << endl; getline(cin,option); if(!(option=="1"||option=="0"||option=="2"||option=="3")) { cout<<"Error! Please try again."<<endl; } }while(!(option=="1"||option=="0"||option=="2"||option=="3"));//wrong input if(option=="1") { cout<<"----Now for Addition----"<<endl; largenum=inputnum(a,b,base_k,lengtha,lengthb); answer[201]={0}; add(a,b,largenum,base_k,answer,lengtha,lengthb); cout<<"Result a+b = "; for(int i=201-detectposition(answer);i<=200;i++) { cout<<answer[i]; } cout<<"\n"<<endl; } if(option=="2") { cout<<"----Now for Subtraction----"<<endl; largenum=inputnum(a,b,base_k,lengtha,lengthb); answer[201]={0}; sub(a,b,largenum,base_k,answer,lengtha,lengthb); cout<<"Result a-b = "; for(int i=201-detectposition(answer);i<=200;i++) { cout<<answer[i]; } cout<<"\n"<<endl; } if(option=="3") { cout<<"----Now for Multiplication----"<<endl; largenum=inputnum(a,b,base_k,lengtha,lengthb); answer[201]={0}; mult(a,b,largenum,base_k,answer,lengtha,lengthb); cout<<"Result a*b = "; for(int i=201-detectposition(answer);i<=200;i++) { cout<<answer[i]; } cout<<"\n"<<endl; } if(option=="0") { cout<<"Good bye!"; return 0; } }while(true); return 0; } int inputnum(int a[201],int b[201],string base_k,int&lengtha,int&lengthb) { for(int i=0;i<201;i++) { a[i]=0;b[i]=0; } string inputa;string inputb;int c1=1; cout<<"Please enter two numbers."<<endl; do { c1=1; cout<<"a = "; getline(cin,inputa); lengtha=inputa.size(); for(int i=200, x=inputa.length()-1;i>=201-inputa.length();i--,x--) { if(inputa[x]>96)//a=97 { if(inputa[x]-87>=stoi(base_k))//wrong { cout<<"Wrong input a! Please enter again!!!"<<endl; c1=1; break; } } else if(inputa[x]>64&&inputa[x]<91)//Upper letter A=65 { if(inputa[x]-55>=stoi(base_k))//wrong { cout<<"Wrong input a! Please enter again!!!"<<endl; c1=1; break; } } else if(inputa[x]-'0'>=stoi(base_k))//0 to 9 { cout<<"Wrong input a! Please enter again!!!"<<endl; c1=1; break; } } c1=0; }while(c1!=0);//input a for(int i=200 ,x=inputa.length()-1;i>=201-inputa.length();i--,x--)//give num a { if(inputa[x]>96) { a[i]=(static_cast<int>(inputa[x]-87)); } else if(inputa[x]>64&&inputa[x]<91) { a[i]=(static_cast<int>(inputa[x]-55)); } else //0 to 9 { a[i]=(static_cast<int>(inputa[x]-'0')); } } do { c1=1; cout<<"b = "; getline(cin,inputb); lengthb=inputb.size(); for(int i=200 , x=inputa.length()-1;i>=201-inputa.length();i--,x--) { if(inputb[x]>96)//a=97 { if(inputb[x]-87>=stoi(base_k))//wrong { cout<<"Wrong input b! Please enter again!!!"<<endl; c1=1; break; } } else if(inputb[x]>64&&inputa[x]<91)//Upper letter A=65 { if(inputb[x]-55>=stoi(base_k))//wrong { cout<<"Wrong input b! Please enter again!!!"<<endl; c1=1; break; } } else if(inputb[x]-'0'>=stoi(base_k))//0 to 9 wrong { cout<<"Wrong input b! Please enter again!!!"<<endl; c1=1; break; } } c1=0; }while(c1!=0);//input b for(int i=200 , x=inputb.length()-1;i>=201-inputb.length();i--,x--)//give num b { if(inputb[x]>96) { b[i]=(static_cast<int>(inputb[x]-87)); } else if(inputa[x]>64&&inputb[x]<91) { b[i]=(static_cast<int>(inputb[x]-55)); } else //0 to 9 { b[i]=(static_cast<int>(inputb[x]-'0')); } } if(lengtha>lengthb) { return lengtha; } else return lengthb; } void add(int a[],int b[],int largenum,string base_k,int answer[201],int &lengtha,int &lengthb) { int carry[201]={0}; for(int i=200;i>=201-lengtha;i--) { answer[i]=a[i]; cout<<answer[i]<<" "; } for(int i=200;i>=201-lengthb;i--) { answer[i]+=b[i]; cout<<answer[i]<<" "; } for(int i=200;i>=201-detectposition(answer);i--) { carry[i]=answer[i]/stoi(base_k); answer[i]%=stoi(base_k); } for(int i=200;i>=201-detectposition(answer)-1;i--) { answer[i-1]+=carry[i]; } } void sub(int a[],int b[],int largenum,string base_k,int answer[201],int&lengtha,int&lengthb) { int carry[201]; for(int i=200;i>=201-largenum;i--)//minus { answer[i]=a[i]-b[i]; } do { for(int i=200;i>=0;i--)// borrow { if(answer[i]<0) { answer[i-1]-=1; answer[i]+=stoi(base_k); } } }while(detectminus(answer)); } bool detectminus(int answer[]) { for(int i=0;i<201;i++) { if(answer[i]<0) { return true; } } return false; } void mult(int a[],int b[],int largenum,string base_k,int answer[201],int&lengtha,int&lengthb) { int carry[201]; for(int i=0;i<201;i++) { answer[i]=0; } for(int x=200;x>=201-lengthb;x--) { for(int i=200;i>=201-lengtha;i--) { answer[i-x]+=a[i]*b[200-x]; } } for(int i=201-detectposition(answer);i<=200;i++) { cout<<answer[i]; } cout<<endl; do { for(int i=200;i>=201-detectposition(answer);i--)// carry out { carry[i]=answer[i]/stoi(base_k); answer[i]%=stoi(base_k); } for(int i=200;i>=201-detectposition(answer)-1;i--) { answer[i-1]+=carry[i]; } }while(detectcarry(answer,base_k)); } bool detectcarry(int answer[],string base_k) { for(int i=0;i<201;i++) { if(answer[i]>=stoi(base_k)) { return true; } } return 0; } int detectposition(int answer[]) { for(int i=0;i<201;i++) { if(answer[i]!=0) { return 201-i; } } return 0; }
Editor is loading...
Leave a Comment