日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

二进制高低位交换の琐事(洛谷P1100题题解,Java语言描述)

發布時間:2025/3/15 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二进制高低位交换の琐事(洛谷P1100题题解,Java语言描述) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目要求

P1100題目鏈接

分析

要求其實還是比較明確的,就是給一個int數據,將其變成二進制表示(32位),前16位整體和后16位整體交換位置,內部不變,再將新的二進制數據重新變成數值輸出。

這題特別惡心的就是這個重新生成的二進制數可能超出int范圍,我們只能在最后parseLong()而不能parseInt()。

對于Java用戶來講,其實就是關于Integer類和Long類的使用問題。

java.lang.Integer類的這個方法對我們處理這個問題很有幫助:
public static String toBinaryString?(int i)
該方法傳入一個int參數,轉化成String類型的二進制字符串,但沒有高位0。

java.lang.Long類的這個方法對我們處理這個問題很有幫助:
public static long parseLong?(String s, int radix)
該方法傳入一個String參數,和一個表示進制的radix參數(這里肯定是要指定為2),將二進制字符串轉換成long類型的數值。

其他的處理就需要其他類的輔助,比如String,比如StringBuilder……
具體的詳見AC代碼。

第一次提交——RE

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String num = Integer.toBinaryString(scanner.nextInt());int length = num.length();StringBuilder builder = new StringBuilder();for (int i = 0; i < 32-length; i++) {builder.append("0");}num = builder.append(num).toString();num = num.substring(16) + num.substring(0, 16);int counter = 0;for (char c : num.toCharArray()) {if (c != '0') {break;}counter++;}num = num.substring(counter);System.out.println(Integer.parseInt(num, 2));scanner.close();} }

獲取了測試數據4:
in
65333513
out
3909682148

測試后發現是沒考慮到導致以后超出了int的范圍,應該換成long。

第二次提交——AC

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String num = Integer.toBinaryString(scanner.nextInt());int length = num.length();StringBuilder builder = new StringBuilder();for (int i = 0; i < 32-length; i++) {builder.append("0");}num = builder.append(num).toString();num = num.substring(16) + num.substring(0, 16);int counter = 0;for (char c : num.toCharArray()) {if (c != '0') {break;}counter++;}num = num.substring(counter);System.out.println(Long.parseLong(num, 2));scanner.close();} }

總結

以上是生活随笔為你收集整理的二进制高低位交换の琐事(洛谷P1100题题解,Java语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。