洛谷刷题总结

今天下午在洛谷刷了一下午的题,话说这个题目确实有意思,做起来思路也挺清晰,但是就是提交的时候总是出问题,这个就很难受。

虽然提交不能AC,但是在刷题的时候也能从中学到很多东西,今下午了解了几个重要的点,

第一点:就是itoa(int, char *, int)函数,这个函数的作用三个参数分别是整数,字符数组,最后一位是指明进制数,
该函数的 作用是将第一个参数转换成第三个参数指定的进制数,然后存到第二个参数字符数组中

为什么说这个函数呢?这个函数可折磨人了,本来程序用这个函数写很好,但是提交的时候出问题了,因为itoa是广泛使用的非标准C语言和C++语言扩展功能。但因为它是一个非标准的C / C++语言功能,因此不能好好的被所有编译器使用,所以提交的时候云端就找不到这个函数,没办法,这个题只能从头开始,所以这个函数印象就很深,所以,在以后的程序中尽量避免使用非标准语言功能

第二点:就是结构体自身拥有构造方法,可能是本人做题不多,今天在看大佬的代码时偶然看到有个大佬用了结构体的构造方法,本质上结构体和类差不多,所以有构造方法也是情理之中的,不过之前没有用过结构体构造方法,所以在这里总结一下

第三点:就是新get到了一个数据类型,是register类型的,今天也是在程序中偶然看到的,register类型是存在寄存器中的,所以读写速度比较快,适用于频繁操作的数据。

最后记录今晚上做的一个例题吧,有个大佬的代码感觉很秀,把这个题记录下来吧,以后有时间研究研究:

题目描述

回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。
给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等
输入输出格式
输入格式:

共一行,一个单独的整数B(B用十进制表示)。

输出格式:

每行两个B进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。

输入输出样例
输入样例#1:

10
输出样例#1:
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696

题解:

#include
#include
#include
using namespace std;
int b;
inline char c(int x){if(x>=0&&x<=9)return x+'0';return x-10+'A';}
struct node
{
    int l,a[20];//进制数最大长度为17
    node(int x){for(l=0;x;l++)a[l]=x%b,x/=b;}//转换进制数,其中a[l-1]是最高位,a[0]是最低位
    void out(){for(int i=l-1;i>=0;i--)printf("%c",c(a[i]));}//从高到低依次输出
    bool tf(){for(int i=0;i

你可能感兴趣的:(ACM,算法,C++)