B3869题解
changzhaochangle · · 题解
题目传送门
本人不擅长Markdown 和LateX ,所以可能比较low ,各位敬请见谅。
第一版没过,这里进行了修改。
1.考点
这题主要考察了对进制的运用和函数的运用(好吧少了点)其实不用函数也可以做,我的第一版就是不用函数做的,但只拿了QAQ)。
2.函数
这题的函数思路很简单:
无非就是
-
先定义一个变量叫做
t ,用来存储转换后的数据 -
再定义一个权值的变量
q (我取的首字母),转换时要用(详见题目最下面有一个转换方法,我在这里就不介绍了)。 -
接下来就开始遍历每一个数字,把转换后得到的数字一个一个加入到
t 里面。 -
返回
t (注意这里一定要开long long ,因为如果是FFFFFFFFF 这个数字开int 会爆,我一开始就栽在了这里)。3.接下来就很简单了
只需输入输出即可。
上代码!
Code #include<bits/stdc++.h> using namespace std; int n,a,q;//q为权值,a为进制 long long t;//不开long long见祖宗 string b;//b为数字(有可能有字符) long long check(string x,int q){ t=0; q=x.size()-1;//注意这里一定要减1,因为string是从0开始输入的 for(int i=0;i<x.size();i++){//遍历 if(x[i]>='0'&&x[i]<='9') t+=(x[i]-'0')*pow(a,q); else t+=(x[i]-'A'+10)*pow(a,q); q--;//这个位置遍历过了,遍历下一位,所以权值减1 } return t; } int main(){ cin >> n; for(int i=1;i<=n;i++){//输入输出 cin >> a >> b; cout << check(b,a) << endl; } return 0; }
我希望这篇题解能给各位带来些许帮助!