美文网首页
高精度计算题(PAT Radix)

高精度计算题(PAT Radix)

作者: 小幸运Q | 来源:发表于2018-07-30 10:52 被阅读13次

  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,没有一进制,特殊情况特殊处理

相关文章

网友评论

      本文标题:高精度计算题(PAT Radix)

      本文链接:https://www.haomeiwen.com/subject/rcstvftx.html