栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二进制换十进制

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二进制换十进制

把一个二进制数转化为十进制数。

输入格式

第一行一个正整数 n (1≤n≤30),表示二进制数的长度。

第二行一个二进制数。

输出格式

输出一个整数,表示对应的十进制数。

Sample Input
5

10101
Sample Output
21
本题的难点

1、用n表示二进制数的长度。

2、将二进制数转化为十进制。

下面就来一一解决吧。

本题首要是要解决二进制转化为十进制的问题。

请允许我借鉴一下百度好吧。

要想知道如何从二进制转化为十进制,我们就要先知道怎么从十进制转化为二进制

先了解熟悉的十进制转二进制

要用这种方法首先得会十进制转二级制的除以2取余的方法。

十进制转二进制

将余数和最后的1从下向上倒序写 就是结果

例如302

302÷2 = 151 余0

151÷2 = 75 余1

75÷2 = 37 余1

37÷2 = 18 余1

18÷2 = 9 余0

9÷2 = 4 余1

4÷2 = 2 余0

2÷2 = 1 余0

1÷2=0 余1

故二进制为100101110

那么现在只要逆推过程,二进制转十进制岂不是易如反掌?????

例如 100101110

1…………0×2+1=1…………余数为1

0…………1×2+0=2………… 余数为0

0 …………2×2+0=4 ………… 余数为0

1 …………4x2+1=9……………… 余数为1

0…………9x2+0=18 ……………… 余数为0

1 …………18×2+1=37 …………余数为1

1…………… 37×2+1=75…………余数为1

1………………75×2+1=151………… 余数为1

0………………151×2+0=302 ………… 余0

所以得到十进制数302

sum*=2;
sum+=getchar()-'0';

利用循环进行以上操作即可。

(getchar()输入的是字符,-‘0’操作是把字符转化为数字了。)

再就是用n控制长度了。

while(n--)
	{
		sum*=2;
		sum+=getchar()-'0';
	}

想必看到就不需要多说了。

所以总代码就是这样了:

#include 
int main(void)
{
	int n;
	scanf("%d",&n);
	int sum=0;
	getchar();
	while(n--)
	{
		sum*=2;
		sum+=getchar()-'0';
	}
	printf("%dn",sum);
	return 0;
}




介绍
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/528817.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号