获取通过scanf("%s", a)
读入的字符数组的长度size_t strlen (const char *)
,头文件string.h
16转2:
char xtob(char a)
{
char bin;
a -= 0x30;
if (a > 0xA) a -= 0x7;
return a;
}
运行完后 a[2]==3
:
int a[10] = {0};
int i=1;
a[i] = i++ + i;
scanf读取字符串的长度有上限:4095(ubuntu环境下)
原因:受限于缓冲区大小
这道题(BASIC-12 十六进制转八进制)的问题不在于读取的字符太长,而在于申请的空间(10*10w的数组)太多,导致运行时错误!
该题应该是分组输入,每输入一组数据,就输出一个结果。这样就不用初始化10个数组,只需要初始化1个。
64位整数
声明:long long
格式化输入输出:
-
windows环境(mingw32):
%I64d
(测试后发现%lld
也能用) -
linux环境:
%lld
cin、cout随便用
常用算法
计算机归根结底只会做一件事:穷举。 所有的算法都是在让计算机【如何聪明地穷举】而已,动态规划也是如此。 reference
-
回溯
-
动态规划(Dynamic Programming)
补充边界值
画表:每个格子里是该情况下的最优解
关键问题:写出状态转移方程(保证每一步都是最优解,通过上一步的最优解求出下一步的最优解)(注意不要算重复了)
编程技巧:滚动数组(如:Fibonacci数列)
-
递归