我是靠谱客的博主 要减肥飞机,最近开发中收集的这篇文章主要介绍进制转化:N进制转化为10进制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

输入: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;
}
else
break;
}
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;
}



最后

以上就是要减肥飞机为你收集整理的进制转化:N进制转化为10进制的全部内容,希望文章能够帮你解决进制转化:N进制转化为10进制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部