n进制数转换成十进制数

// 其他进制数转化成十进制数.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
	string number;
	int change;
	int val;//存放输入数字的位数
	char num[20];//存放每一位值
	int sum = 0;
	int zhishu = 1;
	int ba = 1;

	cout << "please input a number:";
	cin >> number;
	cout << "请输入转换数的进制(2,8,16):";
	cin >> change;

	val = number.size();//返回number字符个数
	for (string::size_type flag=0; flag!=number.size(); ++flag)//把每个string值分开
	{
		num[flag] = number[flag];
	}

	for (int flag3=0,flag2=val; flag2>0; --flag2, ++flag3)
	{
		zhishu = 1;
		if (2 == change)//二进制转换成十进制
		{
			if ('1' == num[flag3])
			{
				for (int flag1=0; flag1<flag2-1; ++flag1)
					zhishu = zhishu * 2;			
				sum = sum + zhishu;
			}
		}
		else if (8 == change)//八进制转换成十进制
		{
			for (int flag1=0; flag1<flag2-1; ++flag1)
					zhishu = zhishu * 8;
			if ('0' == num[flag3])
				ba = 0;
			else if ('1' == num[flag3])
				ba = 1;
			else if ('2' == num[flag3])
				ba = 2;
			else if ('3' == num[flag3])
				ba = 3;
			else if ('4' == num[flag3])
				ba = 4;
			else if ('5' == num[flag3])
				ba = 5;
			else if ('6' == num[flag3])
				ba = 6;
			else if ('7' == num[flag3])
				ba = 7;
			sum = sum + ba * zhishu;
		}
		else if (16 == change)//十六进制转换成十进制
		{
			for (int flag1=0; flag1<flag2-1; ++flag1)
					zhishu = zhishu * 16;
			if ('0' == num[flag3])
				ba = 0;
			else if ('1' == num[flag3])
				ba = 1;
			else if ('2' == num[flag3])
				ba = 2;
			else if ('3' == num[flag3])
				ba = 3;
			else if ('4' == num[flag3])
				ba = 4;
			else if ('5' == num[flag3])
				ba = 5;
			else if ('6' == num[flag3])
				ba = 6;
			else if ('7' == num[flag3])
				ba = 7;
			else if ('8' == num[flag3])
				ba = 8;
			else if ('9' == num[flag3])
				ba = 9;
			else if (('a' == num[flag3]) || ('A' == num[flag3]))
				ba = 10;
			else if (('b' == num[flag3]) || ('B' == num[flag3]))
				ba = 11;
			else if (('c' == num[flag3]) || ('C' == num[flag3]))
				ba = 12;
			else if (('d' == num[flag3]) || ('D' == num[flag3]))
				ba = 13;
			else if (('e' == num[flag3]) || ('E' == num[flag3]))
				ba = 14;
			else if (('f' == num[flag3]) || ('F' == num[flag3]))
				ba = 15;
			sum = sum + ba * zhishu;
		}
		else 
		{
			cout << "error!\n";
			return -1;
		}
	}
	cout << sum << endl;
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值