面试题之自创 实现两个整型大数(都是正数)的相减操作

来源:互联网 发布:linux touch cat 命令 编辑:程序博客网 时间:2024/04/28 20:00

非常大的正整数相减求差

  • 真言

人生如此美好,世上如此多娇,可我只喜欢她,so beautiful。She is the power of mine,how about you?

  • 引言

光大数的加法操作是满足不了我们的,在这里我给大家提供了减法的操作。

  • 思路

被减数和减数对应位相减,如果不够,则向前借位,如果高位为0,继续向前借位。

  • 实验

     

  • 代码

test.cpp
#include <iostream>#include <string>using namespace std;// extra the class of stringclass String:public string{public:// mode the add of intstatic string Add(string a,string b){// exception of inputif( a.empty() )return b;else if( b.empty() )return "0";if(!check_all_number(a) || !check_all_number(b)){return "exception of input add";}Standardization(a);Standardization(b);string::size_type i = a.size()-1 ,j = b.size()-1 , k = 0 ;string c = "";int jinwei = 0;while( i < a.size() && j < b.size() ){c = IntToChar( ( CharToNumber(a[i]) + CharToNumber(b[j]) + jinwei ) % 10 ) + c;jinwei = ( CharToNumber(a[i]) + CharToNumber(b[j]) + jinwei ) / 10;j--;i--;}while( j < b.size()  ){c =  IntToChar( ( CharToNumber(b[j]) + jinwei ) % 10 ) + c;jinwei = ( jinwei + CharToNumber(b[j]) ) / 10;j--;}while( i < a.size() ){c =  IntToChar( ( CharToNumber(a[i]) + jinwei ) % 10 ) + c;jinwei = ( jinwei + CharToNumber(a[i]) ) / 10;i--;}if( jinwei )c = IntToChar(  jinwei  ) + c;return c;}// make char to the int numberstatic int CharToNumber(char c){if( c >= '0' && c <= '9' )return int(c - '0');else {cout<<"exception of input CharToNumber "<<endl;system("pause");return 0;}}// make int to the model charstatic char IntToChar(int i){if( i >= 0 && i <= 9 ){return char(i+48);}else{cout<<i<<" exception of input IntToChar"<<endl;system("pause");}}// check whether the string is legal static bool check_all_number(string a){if(a.empty())return true ;string::size_type L = a.size(),i = 0;while( i < L ){if( a[i] < '0' || a[i] > '9')return false;i++; }return true ;}// make a-b mode int a - b;static string Multiplies(string a,string b){// exception of inputif(!check_all_number(a) || !check_all_number(b))return "exception of input Multiplies";Standardization(a);Standardization(b);// particular string of inputif(a.empty()){if(b.empty())return "0";elsereturn "-"+b;}else if(b.empty()){return a;}// normal number a < bstring c = "";bool check = true ;if(Compare(a,b) == '=')return "0";else if(Compare(a,b) == '<'){c = a ;a = b ;b = c ;c = "";check = false ;}// normal number a >= bstring::size_type i = a.size()-1, j = b.size()-1;int jiewei = 0,now;while(i < a.size() && j < b.size()){now = CharToNumber(a[i]) - CharToNumber(b[j]) - jiewei ;if( now < 0 ){jiewei = 1;now = 10 + now ;}else jiewei = 0;c = IntToChar(now)  + c ;i--;j--;}while(i < a.size()){now = CharToNumber(a[i]) - jiewei ;if( now < 0 ){jiewei = 1;now = 10 + now ;}else jiewei = 0;c = IntToChar( now )  + c ;i--;}Standardization(c);if(!check)c = '-' + c;return c; }// compare string a and bstatic char Compare(string a,string b){if(a.empty() || b.empty()){cout<<"error of imput compare";return 'e';}else{if(a.size() > b.size())return '>' ;else if(a.size() == b.size()){for(string::size_type i = 0;i < a.size(); i++){if(a[i] > b[i])return '>';if(a[i] < b[i])return '<';}return '=';}return '<';}}// make string into standard numberstatic void Standardization(string &a){if(!check_all_number(a)){cout<<a<<" exception of input Standardization"<<endl;}string::size_type i = 0;while(i < a.size()){if(a[i] != '0')break;i++;}a = a.substr(i,a.size());}};// main functionint main(){string a ;string b ;cin>>a>>b;cout<<"a="<<a<<",b="<<b<<endl;cout<<String::Multiplies(a,b)<<endl;system("pause");return 0;}


0 0
原创粉丝点击