#include <iostream> #include <string> #include <vector> //#include <stdlib.h> //#include <assert.h> using namespace std; void reverse_data( string &data) { char temp = '0'; int start=0; int end=data.size()-1; //assert( data.size()&& start <= end ); while ( start < end ) { temp = data[start]; data[start++] = data[end]; data[end--] = temp; } } void compute_value( string lhs,string rhs,string &result ) { reverse_data(lhs); reverse_data(rhs); int i = 0, j = 0, res_i = 0; int tmp_i = 0; int carry = 0; for ( i = 0; i!=lhs.size(); ++i, ++tmp_i ) { res_i = tmp_i; //在每次计算时,结果存储的位需要增加 for ( j = 0; j!= rhs.size(); ++j ) { carry += ( result[res_i] - '0' )+(lhs[i] - '0') * (rhs[j] - '0');//此处注意,每次计算并不能保证以前计算结果的进位都消除, 并且以前的计算结果也需考虑。 result[res_i++] = ( carry % 10 + '0' ); carry /= 10; } while (carry)//乘数的一次计算完成,可能存在有的进位没有处理 { result[res_i++] = (carry % 10 + '0'); carry /= 10; } } for (int i=result.size()-1;i>=0;i--) { if (result[i]!='0') break; else result[i]='#'; //result.pop_back() } reverse_data(result); } int main() { string a,b; //cin>>a>>b; a="123"; b="2"; string result(a.size()+b.size(),'0'); compute_value(a,b,result); cout<<result<<endl; // 7system("pause"); //#include <stdlib.h> return 0; }