浙江大学c语言题库洛谷,洛谷刷题总结

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

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

第一点:就是itoa(char *,int ,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

};

int main()

{

scanf("%d",&b);

for(int i=1;i<=300;i++)//从1到300暴力枚举

{

node n(i*i);//将i*i转化为进制为b的整数

if(n.tf()){node m(i);m.out();putchar(' ');n.out();putchar('\n');}//如果n是一个b进制下的回文数,输出答案

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值