因为确实没有太多好写的东西…就又写作业向的文章了。其实是练习一下C++怎么写,都快忘完了的说
进制取值范围为【2,36】,用到的数码按从小到大依次为:0,1,2,3,4,5,6,7,8,9,A,B,…,Z,不考虑小写字母。
基本原理就是一位一位的除,算出余数,添加进结果字符串中,同时生成商,再一位一位的除,直到商0。
// // NumberConvertor.h // NumberConvertor // n[2,36]base number convert // Created by airjcy on 11/28/12. // Copyright (c) 2012 airjcy. All rights reserved. // #ifndef __NumberConvertor__NumberConvertor__ #define __NumberConvertor__NumberConvertor__ #include #endif /* defined(__NumberConvertor__NumberConvertor__) */ using namespace std; class NumberConvertor { public: //default base 10 NumberConvertor(string _numberToConvert = "0",int _originBase = 10,int _targetBase = 10); void setNumberToConvert(string _numberToConvert){numberToConvert = _numberToConvert;} void setOriginBase(int _originBase){originBase = _originBase;} void setTargetBase(int _targetBase){targetBase = _targetBase;} string getResult(); void printResult(); private: string numberToConvert; string t_numberToConvert; string result; int originBase; int targetBase; bool canConvert(); int numberOfChar(char c); int numberOfStr(string str); char charOfNumber(int num); char modConvertor(); };
// // NumberConvertor.cpp // NumberConvertor // // Created by airjcy on 11/28/12. // Copyright (c) 2012 airjcy. All rights reserved. // #include "NumberConvertor.h" NumberConvertor::NumberConvertor(string _numberToConvert,int _originBase,int _targetBase) { numberToConvert = _numberToConvert; originBase = _originBase; targetBase = _targetBase; } bool NumberConvertor::canConvert() { if (originBase 36 || targetBase 36) { return false; } int i; for (i = 0; i = '1' && numberToConvert[i] = 'A' && numberToConvert[i] 0) { result = modConvertor() + result; // cout << result << endl; } return result; } void NumberConvertor::printResult() { cout << getResult() < 0) { int t = numberOfStr(oldQutient); oldQutient.erase(0,1); num = num * originBase + t; t_numberToConvert += charOfNumber(num / targetBase); //create new number to convert num = num % targetBase; //new remainder } //delete 0 at start while (t_numberToConvert.length() > 0 && t_numberToConvert[0] == '0') { t_numberToConvert.erase(0,1); } return charOfNumber(num); } int NumberConvertor::numberOfChar(char c) { if ((int)c <= '9') { return (int)(c - '0'); } else return (int)(c - 'A' + 10); } char NumberConvertor::charOfNumber(int num) { if (num <= 9) { return (char)('0' + num); } else return (char)('A' + num - 10); } int NumberConvertor::numberOfStr(string str) { int first = numberOfChar(str[0]); return first; }