PAT甲级1010TMD的坑

##TMLGB一切皆有可能

内容:
简介:故事要从博主今天中午睡了个午觉说起,博主醒了浑身乏力只能祭出一道PAT题来找回精神,从此踏上一条不归路。。。
废话不多说,祭题。
PAT甲级1010TMD的坑_第1张图片
题目大概意思:
N1,N2为输入的两个非负整数redix为第tag数的进制数,让我们求最小的redix2使得N1 = N2,比如例子6 110 1 10的答案为2:十进制下的6等于二进制下的110。
先说一下笔者遇到的坑,首先是二分查找。假设N1进制数已知求N2的进制数redix2易知redix2的最小取值为N2所有位上最大值count+1。最大值:(笔者查找了一些博客结合自身理解如有问题请指出)如果N2只有一位有效显然最大值显然没有约束,但如果有两位以上有效那么最大值必然小于等于N1的10进制数NUM1 + 1,为什么呢,因为前提是两位有效,第二位必然大于等于1如果redix2 == NUM1 +1 ,它的10进制数NUM2必然>=NUM1综合上述两种情况得出redix2 = NUM1 + 1 > count + 1? NUM1 + 1 : count + 1;所以这个取值范围可能会很广,暴力测试7过不去。此处重点.
第二个坑:由于笔者是用的double类型所以没有出现其他博客中出现的溢出问题,此处的坑其实是由第一个坑引起的,笔者使用了二分查找但是测试点7还是出现了问题,终于笔者忙乎了一个下午找出了问题所在:redix2的值可能会造成int溢出,因为我们取它的最大可能值为redix2 = NUM1 + 1 > count ? NUM1 + 1 : count;显然在此题中可能会溢出所以我更改为long型存储redix2的最大可能值后测试点7成功通过。
还有一个小坑点就是题目中说了可能不知一个答案且取最小值,明显只有当它为一位数的时候才会出现这种情况,所以我找出redix2的最小之后先测试一下这个最小值是否通过
上图:笔者自己的程序
PAT甲级1010TMD的坑_第2张图片

你可能感兴趣的:(PAT甲级1010TMD的坑)