微众Java方向笔试编程题

前两道挺简单的,第三道数据太大了,只AC70%。
题目大意:求小于或等于整数N的整数的二进制形式下是回文数的个数。
例如:
输入3,输出3
0,1,11这三个。
N的范围是:1<=N<=10^18
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[]args){
        Scanner in = new Scanner(System.in);
        BigInteger n = in.nextBigInteger();
        BigInteger i = BigInteger.valueOf(0);
        BigInteger one = BigInteger.valueOf(1); int []a = new int[200]; for(int p=0;p<200;p++){
            a[p] = 0;
        } int len = 1;
        Integer ans = (Integer) 1; while (n.compareTo(i)>0){
            len=fun(a,len); if(fun2(a,len)){
                ans++;
            }
            i = i.add(one);
        }
        System.out.print(ans);
    }  public static int fun(int []a,int len){  if(a[0] == 0){
            a[0] = 1;  return len;
        }  int flag = 1; int i; for(i=0;i<len;i++){ if(a[i] + flag == 2){
                flag = 1;
                a[i] = 0;
            }else {
                a[i] = 1;
                flag = 0; break;
            }
        } if(i == len){
            a[i] = 1;
            len ++;
        } return len;
    } public static boolean fun2(int []a,int len){ int low = 0; int high = len-1; while (low<=high && a[low] == a[high]){
                low ++;
                high--;
            } if(low > high){ return true;
            } return false;
     }
}

全部评论
都是大佬
点赞 回复 分享
发布于 2018-04-16 23:28
是的 第三道我也是70
点赞 回复 分享
发布于 2018-04-16 21:20
同2.7
点赞 回复 分享
发布于 2018-04-16 21:18
第二道题表示没看懂
点赞 回复 分享
发布于 2018-04-16 21:15
同70,感觉要找规律
点赞 回复 分享
发布于 2018-04-16 21:15

相关推荐

11-27 16:41
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务