八进制转十进制(字符串)

帮学姐做笔试题遇到的,接口convert(const char* src, char* dst),上代码

#include 
#include 
#include 
using namespace std;

string CHAR_ADD_CHAR(string str1, string str2) {//高精度加法 
	string str;
	//把两个整数对齐,短整数前面加0补齐 
	string::size_type L1, L2;
	L1 = str1.size(); L2 = str2.size();
	if (L1 < L2) {
		for (int i = 1; i <= L2 - L1; i++)
			str1 = "0" + str1;
	}
	else {
		for (int i = 1; i <= L1 - L2; i++)
			str2 = "0" + str2;
	}
	int int1 = 0, int2 = 0; //int2 记录进位 
	for (int i = str1.size() - 1; i >= 0; i--)
	{
		int a = int(str1[i]) - '0' + int(str2[i]) - '0' + int2;
		int1 = a % 10;
		int2 = a / 10;
		str = char(int1 + '0') + str;
	}
	if (int2 != 0) str = char(int2 + '0') + str;
	return str;
}

string CHAR_MUL_INT(string str1, int src2) {//高精度乘法 
	string str;
	int i, j; string::size_type L1; L1 = str1.size();
	string tempstr; int int1 = 0, int2 = 0;
	for (i = L1 - 1; i >= 0; i--) { 
			int1 = (src2*(int(str1[i]) - '0') + int2) % 10;
			int2 = (src2*(int(str1[i]) - '0') + int2) / 10;
			tempstr = char(int1 + '0') + tempstr;
		
	} 
	if (int2 != 0)
		tempstr = char(int2 + '0') + tempstr;
	return tempstr;
}

int convert(const char* src, char* dst){
	string strSrc(src);
	string *temp = new string;
	for (int i = strSrc.size() - 1; i >= 0; i--){
		char c = strSrc[i];
		stringstream stream;
		stream << c;
		string t1 = stream.str();
		for (int j = strSrc.size() - 1 - i; j > 0; j--){
			 t1 = CHAR_MUL_INT(t1,8);	
		}
		*temp = CHAR_ADD_CHAR(*temp, t1);
	}	
	dst = temp->c_str();
	return 0;
}

你可能感兴趣的:(c++)