实现一个新浪微博 MID 转换算法

来源:互联网 发布:vb 日期格式转string 编辑:程序博客网 时间:2024/05/23 14:40
新浪微博的消息 ID ( MID ) 有字符型和数字型两种形态,可以互相转换。数字型值是字符型值按照 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*10using 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 , 比如70if (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;}


原创粉丝点击