精华内容
下载资源
问答
  • 展开全部 /** * @param args */ public static void main(String[] args) { Scanner in = ... } 因为是多位数,也不知道多少位,所32313133353236313431303231363533e78988e69d8331333337613838以用大数类型。

    展开全部

    /**

    * @param args

    */

    public static void main(String[] args)

    {

    Scanner in = new Scanner(System.in);

    // 例如 "1234567890123456789012345678901234567890123456789"

    String inputString = in.nextLine();

    BigDecimal bigDecimal = new BigDecimal(inputString);

    String string = bigDecimal.toString();

    char[] charArray = string.toCharArray();

    StringBuffer buffer = new StringBuffer();

    // 从个位数

    for (int i = charArray.length - 1; i >= 0; i--)

    {

    System.out.println("第" + (charArray.length - i) + "位:" + charArray[i]);

    buffer.append(charArray[i] + " ");

    }

    System.out.println(buffer.toString());

    }

    因为是多位数,也不知道多少位,所32313133353236313431303231363533e78988e69d8331333337613838以用大数类型。

    展开全文
  • 题目描述:给定一个数据流,要求随时可以取得中位数 //定义一个大根堆和一个小根堆 首先第一个数入大根堆 public static class MinNumComparator implements Comparator<Integer>{ @Override public int ...

    题目描述:给定一个数据流,要求随时可以取得中位数

    //定义一个大根堆和一个小根堆  首先第一个数入大根堆
    public static class MinNumComparator implements Comparator<Integer>{
    	@Override
    	public int compare(Integer o1, Integer o2) {
    		return o1 - o2;
    	}
    }
    public static class MaxNumComparator implements Comparator<Integer>{
    	@Override
    	public int compare(Integer o1, Integer o2) {
    		return o2 - o1;
    	}
    }
    public static int findMinNum(int[] nums) {
    	PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>(new MinNumComparator());
    	PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(new MaxNumComparator());
    	maxHeap.add(nums[0]);
    	for(int i = 1; i < nums.length; i++) {
    	    //1、当cur <= 大根堆的堆顶时 入大根堆 否则小根堆
    		if(nums[i] <= maxHeap.peek()) maxHeap.add(nums[i]);
    		else minHeap.add(nums[i]);
    		//2、当两个的大小不一致时  需要进行调整 谁大弹谁
    		if(Math.abs(maxHeap.size() - minHeap.size()) >= 2) {
    			if(maxHeap.size() > minHeap.size()) minHeap.add(maxHeap.poll());
    			else maxHeap.add(minHeap.poll());
    		}
    	}
    	//当长度为奇数时  则弹出长度大的那个堆顶元素
    	//否则 取出两个的堆顶元素作平均值
    	int minNum = nums.length % 2 == 1 ? 
    	(minHeap.size() > maxHeap.size() ? minHeap.poll() 
    	: maxHeap.poll()) : (maxHeap.poll() + minHeap.poll()) / 2;
    	return minNum;
    }
    
    展开全文
  • Java codeimport java.util.*;public class Test {public static void main(String[] args) throws Throwable {byte[] data = new byte[12]; //测试数据准备,假设LZ所说的串是保存在byte数组data[0] = Integer....

    Java codeimport java.util.*;

    public class Test {

    public static void main(String[] args) throws Throwable {

    byte[] data = new byte[12]; //测试数据准备,假设LZ所说的串是保存在byte数组中

    data[0] = Integer.valueOf("00011101", 2).byteValue(); //头3个数据用LZ的例子数据

    data[1] = Integer.valueOf("11000011", 2).byteValue();

    data[2] = Integer.valueOf("11000011", 2).byteValue();

    for (int i=3; i

    data[i] = (i%2 == 0) ? (byte)0x00 : (byte)0xff;

    }

    System.out.println("test data:"); //测试数据打印

    for (int i=0; i

    System.out.printf("%s ", bitString((byte)data[i]));

    }

    System.out.println();

    byte key = Integer.valueOf("01110111", 2).byteValue(); //在bit数据中找到的key

    System.out.println("key:");

    System.out.printf("key=%s\n", bitString(key));

    //为了检验程序,程序中对于每次移位以及取数据后做了打印处理

    System.out.println("--------test start--------"); //测试开始

    byte b = 0;

    for (int i=0, bit=0; i

    if (i == 0) {

    b = data[i]; //第一个数据直接取byte的值

    } else {

    System.out.printf("before bit offset:b=%s\n", bitString(b));

    if (bit > 0) { //如果发生移位,并且不是移动整个byte的时候

    b <<= bit; //取下一个byte前bit位来弥补上一个byte不足的数据

    b |= (data[i] >> (8-bit)) & (0x00ff >> (8-bit));

    System.out.printf("%d bit offset:b=%s\n", bit, bitString(b));

    if (b == key) break;

    }

    for (int j=bit; j<8; j++) { //从下一个数据的bit位开始循环

    b <<= 1; //上次数据左移1位

    b |= ((data[i] >> (8-j-1)) & 1); //用下一个数据的1位来补到上次数据的后1位

    System.out.printf("1 bit offset:b=%s\n", bitString(b));

    if (b == key) { //如果找到key,则退出循环,并保存移动的bit数

    bit = (j+1)%8;

    break;

    }

    if (j == 7 && bit > 0) bit = 0;

    }

    }

    if (b == key) { //如果找到key

    System.out.printf("find key=%s\n", bitString(b));

    char[] c = new char[4]; //取64位信息保存到字符数组中

    for (int j=i, k=0, cnt=0; j

    if (j==i) {

    b = data[j]; //第一个byte数据直接保存

    } else {

    if (bit > 0) { //如果发生了移位,即不是整byte的时候

    b <<= bit; //上一个byte左移bit位

    b |= (data[j] >> (8-bit)) & (0x00ff >> (8-bit)); //用下一个的前bit位补到上一个数据的后bit位

    }

    if (cnt == 0) { //第一个byte的时候

    c[k] = (char)b; //保存到字符数组中,并让字符左移8位,相当于字符的高8位保存

    c[k] <<= 8;

    cnt++;

    } else if (cnt == 1) { //第二个byte的时候,保存字符的低8位

    c[k] |= b;

    k++;

    cnt = 0;

    }

    b = data[j];

    }

    }

    for (int j=0; j

    System.out.printf("char data = %s\n", bitString(c[j]));

    }

    i += 8;

    if (i < data.length) b = data[i];

    }

    }

    System.out.println("--------test end--------");

    }

    public static String bitString(byte b) { //获取byte的二进制信息

    StringBuilder buf = new StringBuilder(Integer.toBinaryString(b & 0x000000ff));

    while (buf.length() < 8) {

    buf.insert(0, "0");

    }

    return buf.toString();

    }

    public static String bitString(char c) {//获取char的二进制信息

    StringBuilder buf = new StringBuilder(Integer.toBinaryString(c & 0x0000ffff));

    while (buf.length() < 16) {

    buf.insert(0, "0");

    }

    return buf.toString();

    }

    }

    /*

    简单测试了一下,结果如下

    test data:

    00011101 11000011 11000011 11111111 00000000 11111111 00000000 11111111 00000000

    11111111 00000000 11111111

    key:

    key=01110111

    --------test start--------

    before bit offset:b=00011101

    1 bit offset:b=00111011

    1 bit offset:b=01110111

    find key=01110111

    char data = 0000111100001111

    char data = 1111110000000011

    char data = 1111110000000011

    char data = 1111110000000011

    before bit offset:b=11111111

    2 bit offset:b=11111100

    1 bit offset:b=11111000

    1 bit offset:b=11110000

    1 bit offset:b=11100000

    1 bit offset:b=11000000

    1 bit offset:b=10000000

    1 bit offset:b=00000000

    before bit offset:b=00000000

    1 bit offset:b=00000001

    1 bit offset:b=00000011

    1 bit offset:b=00000111

    1 bit offset:b=00001111

    1 bit offset:b=00011111

    1 bit offset:b=00111111

    1 bit offset:b=01111111

    1 bit offset:b=11111111

    --------test end--------

    */

    展开全文
  • 试设计一个O(logn)时间的分治算法,找出X和Y的2n个数的中位数思想:对于数组X[0:n-1]和Y[0:n-1]先分别找出X和Y的中位数xa和yb。求中位数的算法是这样的,若n是奇数,即数组X和Y中各有奇数个数字,因为X和Y已经排好序...

    问题:设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数。试设计一个O(logn)时间的分治算法,找出X和Y的2n个数的中位数

    思想:

    对于数组X[0:n-1]和Y[0:n-1]先分别找出X和Y的中位数xa和yb。求中位数的算法是这样的,若n是奇数,即数组X和Y中各有奇数个数字,因为X和Y已经排好序了,所以去数组下标为(n-1)/2处的数即为中位数。若n是偶数,则取(n-1)/2向下取整和向上取整这两个位置的数的平均值作为中位数。

    两者进行比较,

    (1)若xa=yb则xa或者xb即为整个2n个数中的中位数,算法结束。因为:若每个数组中数字的个数是偶数个,则X中小于中位数的有n/2个,大于中位数的有n/2个,同理Y也是如此,所以在整个2n数组中比xa=yb小的共有n个数,比n大的共有n个数,即为中位数。若每个数组中数字的个数是奇数,则X中小于xa的有(n-1)/2个,大于xa的也有(n-1)/2个,同理Y中也是如此,所以对于xa或者是yb则整个2n数组中小于和大于他们的数分别为(n-1)个,取这两个数的平均值(xa+yb)/2=xa=yb即为中位数.

    (2) 若xa>yb,则说明整个2n个数的的中位数一定在X数组的前一半和Y数组的后一半中,因为:若中位数在X数组的中位数之后,则比它小的数共有X数组中大于n/2个数以及Y数组中大于n/2个数总计超过了n个数,不符合中位数的定义。若中位数是在Y数组的前一半之中,则比它大的数字共有Y中包括中位数在内的后半部数加上X数组包括中位数在内的后半部,这样也超过了n个数,不符合中位数的定义。

    (3) 若xa

    确定中位数所在的数组范围后,递归调用求中位数算法对这个范围的数组求中位数重复上述过程,直至:

    1.出现xa=yb情况,找到了中位数算法结束。

    2.数组分割至左右两部数组只有一个数字的情况,求其平均值即为中位数

    代码:

    1 /*

    2 思路:求两有序数组x和y的第k个数,思路如下:3 若k为1,则返回两数组的最小值4 取x的第i个数x0,取y的第(k-i)个数y05 若x0=y0,则x0即为所求6 若x0y0,则丢弃y的前(k-i)个数,k=i,递归8 */

    9 importjava.util.Scanner;10 importjava.util.List;11 importjava.util.ArrayList;12

    13 public classSolution{14

    16 public int findOneSideMedian(inta[]){17 intmid;18 int length=a.length;19 //if(a[])数组长度a.length

    20 if((length&0x01)==0){//判断子数组的长度是奇数还是偶数

    21 mid=(a[length/2]+a[length/2-1])/2;22 }else{23 mid=a[length/2];24 }25 returnmid;26 }27

    28 public double findMedian(int x[],int y[] intn){29 if(n==0){30 break;31 }32 int mid_x=findOneSideMedian(x);33 int mid_y=findOneSideMedian(y);34 if(n==1){35 return (mid_x+mid_y)/2;36 }37 if(mid_x==mid_y){38 returnmid_x;39 }else if(mid_x>mid_y){40 int[] x2=Arrays.copyOfRange(x,0,n/2);41 int[] y2=Arrays.copyOfRange(y,Math.ceil(n/2),n);42 n=n/2;43 findMedian(x2,y2,n);44 }else if(mid_x

    展开全文
  • /*** 找出四位数的所有吸血鬼数字* 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字选取的数字可以任意排序.* 以两个0结尾的数字是不允许的...
  • import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;.../** * 要求: * 1 每次一个,共4次,4次组成一个4位数,拼起来为Set * 2 每次取数,Set的每个都有相同的...
  • 场景描述:Java 基本类型都是有符号数值,如果接收到了 C/C++ 处理的无符号数值字节流,将出现转码错误。解决方式:使用 long 型的 64 十六进制 0xFFFFFFFFL,对取得的 32 (4字节)的整型数值,做按与(&...
  • Java中32无符号

    千次阅读 2019-08-05 22:05:20
    Java 基本类型都是有符号数值,如果接收到了 C/C++ 处理的无符号数值字节流,将出现转码错误。 解决方式: 使用 long 型的 64 十六进制 0xFFFFFFFFL,对取得的 32 (4字节)的整型数值,做按与(&)...
  • 我想他想数字。是的,我想要数字。与示例相同,但不将其转换为字符串人们给你的答案是正确的……他们给你int的长度,而不把它转换成字符串……但是为什么不把它转换成字符串呢?这是速度问题吗?...
  • https://leetcode-cn.com/problems/guess-number-higher-or-lower/solution/shi-fen-hao-yong-de-er-fen-cha-zhao-fa-mo-ban-pyth/
  • //方法一double b = 8.0/3.0; //与C语言不同,此处8.0和8有所区分String format = ... //表示小数点几System.out.println(format);方法一:使用string的format方法进行小数点的保留。可修改2f的数字用于确定需要...
  • java 从int数组获取最大的方法首先要有数组的概念吧,知道什么是数组,简单讲就是存放一组数据的一个组合,就是一个数组。。。。哈哈已知一个int数组, 编程从数组获取最大.思路分析:1、一个数组可能有很多...
  • java两个整数相除保留两小数:http://blog.sina.com.cn/s/blog_624d755d0101cvuq.htmljava中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两整数...
  • java 八种基本数据类型之初始值、取值范围、对应的封装类CreateTime--2017年12月6日10:03:53 Author:Marydon...Java 程序,任何变量都必须经初始化后才能被使用.当一个对象被创建时,实例变量在分配内存空间时按程序...
  • java两个整数相除保留两小数: http://blog.sina.com.cn/s/blog_624d755d0101cvuq.html java中,当两个整数相除时,由于小数点以后的数字会被截断,运算结果将为整数,此时若希望得到运算结果为浮点数,必须将两...
  • 有四种方法: 一.double d = 13.24535; d = ((int)(d*100))/100;...//结果小数点后两,且四舍五入 (d-0.005).ToString("f2");//直至保留小数点前两,不四舍五入 (4)string.Format("{0:f2}",要显示的数据);
  • JAVA---字符串随机四位数

    千次阅读 2013-09-15 10:56:38
    //字符串随机四位数 import java.util.Random;  public class RandomNum {  // 写方法  public static String randomCheckCode(String str) {  // 声明返回值  String temp = "";  // ...
  • 最近再项目到的一系列带很长小数的数字,展现时要求去小数点后两显示就可以了开始我是以下写法:double a =0.1234455;DecimalFormat decimalFormat=new DecimalFormat(".00");decimalFormat.format(a);结果...
  • 一Long是长整型,怎么有小数,是double吧java.text.DecimalFormat df=new java.text.DecimalFormat("#.##");double d=3.14159;System.out.println(df.format(d));二java.math.BigDecimalBigDecimal bd = new ...
  • 思路:三层循环。 public class Prog11 { public static void main(String[] args) { int count=0; int n=0; for(int i=1;... System.out.println("符合条件的共:"+count+"个"); } }  
  • 一,计算某个正数的二进制表示法 1 的个数 1 //求解正数的二进制表示法的 1 的位数2 private static int countBit(intnum){3 int count = 0;4 for(; num > 0; count++)5 {6 num &= (num - 1);7 }8 ...
  • 直接使用PriorityQueue构造大小堆,大顶堆放小于中位数的集合,小顶堆放大于中位数的集合,取得时候,如果是奇数,就前半部分的最大数,如果是偶数,就前半部分的最大数和后半部分的最小数的平均数往里放的时候...
  • import java.math.BigDecimal; import java.math.MathContext;... * JAVA中关于数字有效位数,和小数点后保留几小数的小示例。 * @author SailingZhao * */ public class TestBigDecimal { /**保留几
  • 位数 本题为2017年蓝桥杯java B组 的一个填空题,需要在横线位置填入代码,使程序得以正确运行。 package PastExam2017; /** @author DengMingxu 20212021年3月28日 State:unsolved Hint: 对于题目...
  • 一,计算某个正数的二进制表示法 1 的个数1 //求解正数的二进制表示法的 1 的位数2 private static int countBit(int num){3 int count = 0;4 for(; num > 0; count++)5 {6 num &= (num - 1);7 ...
  • 数据结构与算法之字符凭拼接最低字典序和数据流中取中位数 目录 字符凭拼接最低字典序 数据流中取中位数 1. 字符凭拼接最低字典序 题目描述 思路: 创建一个比较器,比较的内容是(o1+o2)...
  • 查找中位数java 快速排序)

    千次阅读 2016-10-31 16:14:39
    中位数(又称中值,英语:Median),统计学中的专有名词,代表一个样本、种群...如果观察值有偶数个,通常最中间的两个数值的平均数作为中位数java代码:import java.util.*; /** * @version 1.0 * @author zho
  • 取数位 求1个整数的第k数字有很多种方法。 以下的方法就是一种。 对于题目的测试数据,应该打印5。 请仔细分析源码,并补充划线部分所缺少的代码。 注意:只提交缺失的代码,不要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 626
精华内容 250
关键字:

java取中位数

java 订阅