高精度计算题(PAT Radix)


  1. 给的输入用int可能会溢出,所以要使用long long
  2. 你以为long long可以了,对不起,计算的时候有乘法,可能会溢出。
long long func(){
    // 计算之后看是否变成负数,变成负数说明溢出,拜拜。
}
  1. typedef long long LL减少代码量

  2. 如果逐个进制计算,考虑到高精度计算的计算开销大,一般建议进行二分查找更好。

void binsearch(int start,int ends){
    if(ends>start){
      return;
    }
    int middle=...;
    binsearch(start,middle-1);
    binsearch(middle+1,ends);
}
  1. 相加除以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,没有一进制,特殊情况特殊处理

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容