- 给的输入用
int
可能会溢出,所以要使用long long
- 你以为
long long
可以了,对不起,计算的时候有乘法,可能会溢出。
long long func(){
// 计算之后看是否变成负数,变成负数说明溢出,拜拜。
}
typedef long long LL
减少代码量如果逐个进制计算,考虑到高精度计算的计算开销大,一般建议进行二分查找更好。
void binsearch(int start,int ends){
if(ends>start){
return;
}
int middle=...;
binsearch(start,middle-1);
binsearch(middle+1,ends);
}
- 相加除以2的二进制写法:
mid = (l+r) >> 1
以下是本题的解析:
需要计算进制的下限,因为1a
用二进制计算的结果是2+10=12
,跟十进制的12
相等,很显然是错误的。进制的上限制题目没给,但是肯定不会大于最小十进制数+1
。
int findSmallestRadix(char num[])
{
int max = 0;
for (int i = 0; num[i] != '\0'; i++)
{
if (max < char2int(num[i]))
{
max = char2int(num[i]);
}
}
return max + 1;
}
当输入 0 0 1 10时肯定不能返回1,没有一进制,特殊情况特殊处理