新浪微博的消息 ID ( MID ) 有字符型和数字型两种形态,可以互相转换。数字型值是字符型值按照 62 进制转换的结果 。 实现一种单向转换即可 。
提示:
转换对应关系:
2211 1041021 6147026 <-> zF 4mOF pN7A
34 7402967 3316812 <-> y v3QH dUQY
自右起,每 7 位 10 进制数字 对应 4 位 62 进制字符
提示:
转换对应关系:
2211 1041021 6147026 <-> zF 4mOF pN7A
34 7402967 3316812 <-> y v3QH dUQY
自右起,每 7 位 10 进制数字 对应 4 位 62 进制字符
62 进制字典: 0~9 + a~b + A~B
// MIDCoversion.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <vector>
#define CONVERSIONNUMBER 62
#define CMAX 50
#define SEVENTEN 10*10*10*10*10*10*10
using namespace std;
void PrintNum(ULONGLONG ullSevenNum)
{
ULONGLONG iResult = 0;
int iRemain = 0;
int iTemp = 0,i = 0;
char cTemp;
char cTen = 'a';
char cTeen = 'A';
char cZero = '0';
char aResult[CMAX];
iResult = ullSevenNum;
while(iResult != 0)
{
iRemain = iResult%CONVERSIONNUMBER;
iResult = iResult/CONVERSIONNUMBER;
if (iRemain >= 0 && iRemain <10)
{
cTemp = cZero + iRemain;
}
else if (iRemain > 9 && iRemain <36)
{
iTemp = iRemain - 10;
cTemp = cTen + iTemp;
}
else
{
iTemp = iRemain - 36;
cTemp = cTeen + iTemp;
}
aResult[i] = cTemp;
i++;
}
i--;
for (;i>=0;i--)
{
printf("%c",aResult[i]);
}
}
void SepNum(ULONGLONG ullInNum,vector<ULONGLONG> &vecSep)
{
ULONGLONG ullMaxNum = 10;
int iRemain = 0;
vector<ULONGLONG> vecNeedMinu;
ULONGLONG ullAllNum = ullInNum;
ULONGLONG ullSevenNum = 0;
vecSep.clear();
vecNeedMinu.clear();
while(ullAllNum != 0)
{
iRemain = ullAllNum%10;
ullAllNum = ullAllNum/10;
if (iRemain == 0)
{
//第一次进入就是0 , 比如70
if (ullMaxNum/10 != 1)
{
ullSevenNum = ullSevenNum + ullMaxNum/10;
vecNeedMinu.push_back(ullMaxNum/10);
}
}
else
{
ullSevenNum = ullSevenNum+iRemain*ullMaxNum/10;
}
if (ullMaxNum == SEVENTEN/* || ullMaxNum == SEVENTEN*2 || ullMaxNum == SEVENTEN*3*/)
{
vector<ULONGLONG>::iterator iter;
for (iter = vecNeedMinu.begin(); iter != vecNeedMinu.end();iter++)
{
ullSevenNum = ullSevenNum - *iter;
}
vecSep.push_back(ullSevenNum);
vecNeedMinu.clear();
ullSevenNum = 0;
ullMaxNum = 1;
}
ullMaxNum = ullMaxNum*10;
}
vecSep.push_back(ullSevenNum);
}
int _tmain(int argc, _TCHAR* argv[])
{
ULONGLONG iInNum = 0;
cout<<"please put in a number "<<endl;
cin>>iInNum;
if (iInNum < 0)
{
printf("input number is error");
system("pause");
return 0;
}
vector<ULONGLONG> vecSep;
SepNum(iInNum,vecSep);
vector<ULONGLONG>::reverse_iterator iter;
for (iter = vecSep.rbegin(); iter != vecSep.rend();iter++)
{
PrintNum(*iter);
}
system("pause");
return 0;
}