位运算符中的算法4

         		  2020.2.3   17:05

题目一:给定一个介于0~1之间的实数,类型为double,求二进制表示结果。

  思路:首先可以回顾一下一个整数是怎样转换为2进制的,我们是将整数部分进行求余操作,那么在表示小数部分的时候也比较类似,比如一个小数0.625,我们在转换的时候是将这个数本身乘以2,保留整数部分,其余的小数去整之后继续去乘以2,如此往下进行操作。在写代码的时候,注意要用到StringBuilder进行拼接字符。

代码展示:

package LanQiaoKnowledgePractise;
//改写0~1之间的浮点小数为二进制    
public class Binary {
public static void main(String[] args) {double num=0.75;StringBuilder sb=new StringBuilder("0.");while(num>0) {double r=num*2;if(r>=1) {sb.append('1');num=r-1;				//小数部分继续乘}else {sb.append(0);num=r;}if(sb.length()>34) {System.out.println("Error");return;	}}System.out.println(sb.toString());}
}

附上笔记:(懒得手打)
在这里插入图片描述

题目二:数组中只有一个数字出现了1次,其他的数字出现了k次,请输出只出现了1次的数字。

		思路:我们这样思考,利用进制的思想,数字出现了k次,我们将它设为k进制的转换,利用进制之间的加法(详细的笔记会在下面的图片中展出),k个k进制的数字相加之和为0,那么,就只剩下出现了一次的数字,这个数字已经被转化称为了k进制,那么再把这个数字转换为10机制,就得到了这个数字。

代码展示:

package LanQiaoKnowledgePractise;public class appearTeat {public static void main(String[] args) {int []arr= {2,2,2,5,7,7,7,8,8,8,3,3,3,6,6,6	};int len=arr.length;char[][]KRadix=new char[len][];int k=3;int maxlen=0;for(int i=0;i<len;i++) {KRadix[i]=new StringBuilder(Integer.toString(arr[i], k)).reverse().toString().toCharArray();if(KRadix[i].length>maxlen) {maxlen=KRadix.length;}}int []resArr=new int[maxlen];for(int i=0;i<len;i++) {for(int j=0;j<maxlen;j++) {if( j>=KRadix[i].length) {resArr[j]=resArr[i]+0;}else {resArr[j]=resArr[j]+(KRadix[i][j]-'0');}}}int res=0;for(int i=0;i<maxlen;i++) {res+=(resArr[i]%k)*(int)(Math.pow(k, i));}System.out.println(res);}
}

笔记展示:
在这里插入图片描述

在这里插入图片描述

慢慢品吧!
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部