题解 P1143 【进制转换】

cosmicAC

2018-10-26 17:44:48

Solution

这种题干嘛要手写呢,C++已经给你准备好了现成的函数。 有个现成的函数叫做strtol(),可以把任一进制的字符串转成long。用法:strtol(字符串,NULL,要转的进制),返回值就是结果。 但问题是把int转成别的进制字符串有些困难,windows下有个现成的itoa()函数,可以把int转成任一进制的字符串,可惜洛谷是linux评测。 然后我就在[这个网站](https://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5)中找了一会儿解决方案。最后因为我太菜了,只会使用C++17的to_chars。用法:to_chars(字符串,字符串尾部指针,要转的值,目标进制) 但是我的本地编译环境是clang,众所周知clang对于新标准的支持总是比较迟缓的,于是只好使用洛谷IDE的g++了。 还有一个问题,就是这样转出来的字符串是小写的,题目要求是大写。这好像没有现成的函数可以做,于是又在那个网站找了下,最后找到了<locale>中的toupper函数。 最后注意数组不要开小了。 代码如下,可在Linux环境下开C++17使用G++7.3编译: ```C++ #include<bits/stdc++.h> using namespace std; int b,m;char s[40],t[40]; int main(){ scanf("%d %s %d",&b,s,&m); to_chars(t,t+40,strtol(s,NULL,b),m); //如果把上面一行改成itoa(strtol(s,NULL,b),t,m),应该就能使用Dev-C++,C++11编译通过 auto& f=use_facet<ctype<char>>(locale()); f.toupper(t,t+40); puts(t); return 0; } ```