进制转化:N进制转化为10进制

来源:互联网 发布:php 递归算法1加到100 编辑:程序博客网 时间:2024/05/09 08:40

输入:N [<35,数字的字符串其中包括0-9和a-z(表示10-35)]进制的字符串

输出:对应的10进制数

#include<iostream>     #include<string>#include<map>using namespace std;      // 构造字符所对应的十进制值map<string,int> Init_dict(){map<string,int> dict;string str = "0123456789abcdefghijklmnopqrstuvwxyz";for(string::size_type i = 0;i < str.size();i++){dict.insert(make_pair(str.substr(i,1),i));}return dict;}// 字符串转化为十进制double ToDeci(string str,int m,map<string,int> dict){double sum = 0;int n = str.size();// 切分每一个字符,求十进制for(string::size_type i = 0;i < str.size();i++){string tmp;tmp = str.substr(i,1);int num;num = dict[tmp];sum += num * pow(double(m),double(n-i-1));}return sum;}int main(void)   {   string str;string ch_str = "0123456789abcdefghijklmnopqrstuvwxyz";cout << "输入需要转化的字符串 ,只能包括( 0-9,a-z) :" << endl;map<string,int> dict;dict = Init_dict();while(1){cin >> str;if(str.find_first_not_of(ch_str)!=str.npos){cout << "输入有误,请重新输入,只能包括( 0-9,a-z) :" << endl;}elsebreak;}int ary;cout << "请输出当前字符串的进制(2-34) :" << endl;while(1){cin >> ary;int max = 0;for(string::size_type i = 0;i < str.size();i++){int num;string tmp;tmp = str.substr(i,1);num = dict[tmp];if(num > max){max = num;}}if(max >= ary)cout << "字符串与进制不想符(进制太小,字符太大),请重新输入" << endl; else break;}cout << "--------------------------" << endl;double sum = ToDeci(str,ary,dict);cout << ary << "进制 " << str << " 转化为十进制是: " << sum << endl;  return 0;}



0 0