【题目来源】https://www.luogu.com.cn/problem/B3869【题目描述】N 进制数指的是逢 N 进一的计数制。例如人们日常生活中大多使用十进制计数而计算机底层则一般使用二进制。除此之外八进制和十六进制在一些场合也是常用的计数制十六进制中一般使用字母 A 至 F 表示十至十五本题中十一进制到十五进制也是类似的。在本题中我们将给出 个不同进制的数。你需要分别把它们转换成十进制数。【输入格式】输入的第一行为一个十进制表示的整数 N。接下来 N 行每行一个整数 K随后是一个空格紧接着是一个 K 进制数表示需要转换的数。保证所有 K 进制数均由数字和大写字母组成且不以 0 开头。保证 K 进制数合法。保证 N≤1000保证 2≤K≤16。保证所有 K 进制数的位数不超过 9。【输出格式】输出 N 行每一个十进制数表示对应 K 进制数的十进制数值。​​​​​​​【输入样例】28 136216 3F0​​​​​​​【输出样例】7541008【说明/提示】对于任意一个 L 位 K 进制数假设其最右边的数位为第 0 位最左边的数位为第 L-1 位我们只需要将其第 i 位的数码乘以权值 K再将每位的结果相加即可得到原 K 进制数对应的十进制数。下面是两个例子1. 八进制数 1362 对应的十进制数为1×8^33×8^26×8^12×8^07542. 十六进制数 3F0 对应的十进制数为3×16^215×16^10×16^01008。【算法分析】● 本题是任意进制转十进制。十进制转任意进制详见https://blog.csdn.net/hnjzsyjyj/article/details/146247521​​​​​​​●​​​​​​​ 本题要开long long因为 16^9 已经超出了 int 的数据范围。● 研读代码掌握任意进制转换时字符串的使用技巧。【算法代码一string t0123456789ABCDEF;】s.find(t)查找字符 t 在字符串 s 里面的下标。#include bits/stdc.h using namespace std; typedef long long LL; string t0123456789ABCDEF; int main() { int T; cinT; while(T--) { int k; string s; cinks; LL e1,sum0; for(int is.size()-1;i0;i--){ sumt.find(s[i])*e; e*k; } coutsumendl; } return 0; } /* in: 2 8 1362 16 3F0 out: 754 1008 */【算法代码二】#include bits/stdc.h using namespace std; typedef long long LL; LL convert(int p, string s) { LL ans0; reverse(s.begin(),s.end()); for(int i0; is.size(); i) { if(s[i]A) ans(s[i]-A10)*pow(p,i); else ans(s[i]-0)*pow(p,i); } return ans; } int main() { int T; cinT; while(T--) { int p; string s; cinps; coutconvert(p,s)endl; } return 0; } /* in: 2 8 1362 16 3F0 out: 754 1008 */【参考文献】https://blog.csdn.net/hnjzsyjyj/article/details/149136573https://blog.csdn.net/hnjzsyjyj/article/details/146247521