代码
/*
* MaxNumMulti.h
*
* Created on: 2010-4-2
* Author: root
*/
#ifndef MAXNUMMULTI_H_
#define MAXNUMMULTI_H_
#include < string >
#include < stdlib.h >
#include < sstream >
#include < iostream >
using namespace std;
class MaxNumMulti {
public :
MaxNumMulti( string a, string b);
string getMultiResult();
virtual ~ MaxNumMulti();
private :
string maxNumA;
string maxNumB;
int * linkA;
int lenA;
int * linkB;
int lenB;
int * linkC;
void constructLink();
void multi();
};
#endif /* MAXNUMMULTI_H_ */
* MaxNumMulti.h
*
* Created on: 2010-4-2
* Author: root
*/
#ifndef MAXNUMMULTI_H_
#define MAXNUMMULTI_H_
#include < string >
#include < stdlib.h >
#include < sstream >
#include < iostream >
using namespace std;
class MaxNumMulti {
public :
MaxNumMulti( string a, string b);
string getMultiResult();
virtual ~ MaxNumMulti();
private :
string maxNumA;
string maxNumB;
int * linkA;
int lenA;
int * linkB;
int lenB;
int * linkC;
void constructLink();
void multi();
};
#endif /* MAXNUMMULTI_H_ */
代码
/*
* MaxNumMulti.cpp
*
* Created on: 2010-4-2
* Author: root
*/
#include " MaxNumMulti.h "
MaxNumMulti::MaxNumMulti( string a, string b) {
// TODO Auto-generated constructor stub
maxNumA = a;
maxNumB = b;
}
MaxNumMulti:: ~ MaxNumMulti() {
// TODO Auto-generated destructor stub
delete[] linkA;
delete[] linkB;
delete[] linkC;
}
void MaxNumMulti::constructLink() {
lenA = maxNumA.length();
lenB = maxNumB.length();
linkA = new int [lenA];
linkB = new int [lenB];
linkC = new int [lenA + lenB];
int i = 0 ;
for (; i < lenA && i < lenB; i ++ ) {
linkA[i] = maxNumA[lenA - 1 - i] - ' 0 ' ;
linkB[i] = maxNumB[lenB - 1 - i] - ' 0 ' ;
}
if (i == lenA) {
for (; i < lenB; i ++ ) {
linkB[i] = maxNumB[lenB - 1 - i] - ' 0 ' ;
}
} else {
for (; i < lenA; i ++ ) {
linkA[i] = maxNumA[lenA - 1 - i] - ' 0 ' ;
}
}
for (i = 0 ; i < lenA + lenB; i ++ ) {
linkC[i] = 0 ;
}
}
void MaxNumMulti::multi() {
int append = 0 ;
int indexC = 0 ;
for ( int i = 0 ; i < lenA; i ++ ) {
int bufC = indexC;
for ( int j = 0 ; j < lenB; j ++ ) {
int buf = linkA[i] * linkB[j] + append + linkC[bufC];
int res = buf % 10 ;
int div = buf / 10 ;
linkC[bufC ++ ] = res;
append = div;
}
linkC[bufC] = append;
append = 0 ;
indexC ++ ;
}
}
string MaxNumMulti::getMultiResult() {
constructLink();
multi();
int lenC = lenA + lenB;
if (linkC[lenC - 1 ] == 0 )
lenC -= 1 ;
string str = "" ;
for ( int i = lenC - 1 ; i >= 0 ; i -- ) {
stringstream tmp;
tmp << linkC[i];
str = str + string (tmp.str());
}
// cout<<str<<endl;
return str;
}
* MaxNumMulti.cpp
*
* Created on: 2010-4-2
* Author: root
*/
#include " MaxNumMulti.h "
MaxNumMulti::MaxNumMulti( string a, string b) {
// TODO Auto-generated constructor stub
maxNumA = a;
maxNumB = b;
}
MaxNumMulti:: ~ MaxNumMulti() {
// TODO Auto-generated destructor stub
delete[] linkA;
delete[] linkB;
delete[] linkC;
}
void MaxNumMulti::constructLink() {
lenA = maxNumA.length();
lenB = maxNumB.length();
linkA = new int [lenA];
linkB = new int [lenB];
linkC = new int [lenA + lenB];
int i = 0 ;
for (; i < lenA && i < lenB; i ++ ) {
linkA[i] = maxNumA[lenA - 1 - i] - ' 0 ' ;
linkB[i] = maxNumB[lenB - 1 - i] - ' 0 ' ;
}
if (i == lenA) {
for (; i < lenB; i ++ ) {
linkB[i] = maxNumB[lenB - 1 - i] - ' 0 ' ;
}
} else {
for (; i < lenA; i ++ ) {
linkA[i] = maxNumA[lenA - 1 - i] - ' 0 ' ;
}
}
for (i = 0 ; i < lenA + lenB; i ++ ) {
linkC[i] = 0 ;
}
}
void MaxNumMulti::multi() {
int append = 0 ;
int indexC = 0 ;
for ( int i = 0 ; i < lenA; i ++ ) {
int bufC = indexC;
for ( int j = 0 ; j < lenB; j ++ ) {
int buf = linkA[i] * linkB[j] + append + linkC[bufC];
int res = buf % 10 ;
int div = buf / 10 ;
linkC[bufC ++ ] = res;
append = div;
}
linkC[bufC] = append;
append = 0 ;
indexC ++ ;
}
}
string MaxNumMulti::getMultiResult() {
constructLink();
multi();
int lenC = lenA + lenB;
if (linkC[lenC - 1 ] == 0 )
lenC -= 1 ;
string str = "" ;
for ( int i = lenC - 1 ; i >= 0 ; i -- ) {
stringstream tmp;
tmp << linkC[i];
str = str + string (tmp.str());
}
// cout<<str<<endl;
return str;
}