B3620 题解

题目传送门

\(\color{red}{see}\space \color{green}{in}\space \color{blue}{my}\space \color{purple}{blog}\)

小学生又双叒叕来写题解啦!

这题是 \(x\) 进制转 \(10\) 进制的模板题。

如何计算呢,我在此引用一张百度搜索的图片。

图片清晰地展示了 \(x\) 进制转 \(10\) 进制的方法。

那么如何在程序中实现呢?

我们使用基数乘后累加的思想实现。

这也并不是什么高科技办法,具体看下面的代码:

int ans = 0;
for (int i = 0; i < s.length(); i++)
{
	if ('0' <= s[i] && s[i] <= '9')
	{
		//累乘的思想,达到次方的要求。 
		ans = ans * x + (s[i] - '0');
	}
	else
	{
		//如果是字母,就按字母的权值计算。 
		ans = ans * x + (s[i] - 'A' + 10);
	}
}

弄明白之后,我们把上面的代码扔进函数里即可。

完整代码:

#include <iostream>
#include <cstdio>
using namespace std;
int x_to_ten(string s, int x)
{
	int ans = 0;
	for (int i = 0; i < s.length(); i++)
	{
		if ('0' <= s[i] && s[i] <= '9')
		{
			//累乘的思想,达到次方的要求。 
			ans = ans * x + (s[i] - '0');
		}
		else
		{
			//如果是字母,就按字母的权值计算。 
			ans = ans * x + (s[i] - 'A' + 10);
		}
	}
	return ans;
}
int main()
{
	int x;
	string s;
	cin >> x >> s;
	cout << x_to_ten(s, x);
	return 0;
}

首发:2022-03-27 10:30:42

posted @ 2022-08-25 00:30  liangbowen  阅读(57)  评论(0编辑  收藏  举报