Tags

, , ,

因为确实没有太多好写的东西…就又写作业向的文章了。其实是练习一下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;
}