蓝桥杯-2的次幂表示(java)
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯-2的次幂表示(java)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
算法訓(xùn)練 2的次冪表示 時(shí)間限制:1.0s 內(nèi)存限制:512.0MB問題描述任何一個(gè)正整數(shù)都可以用2進(jìn)制表示,例如:137的2進(jìn)制表示為10001001。將這種2進(jìn)制表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達(dá)式:137=2^7+2^3+2^0現(xiàn)在約定冪次用括號(hào)來表示,即a^b表示為a(b)此時(shí),137可表示為:2(7)+2(3)+2(0)進(jìn)一步:7=2^2+2+2^0 (2^1用2表示)3=2+2^0所以最后137可表示為:2(2(2)+2+2(0))+2(2+2(0))+2(0)又如:1315=2^10+2^8+2^5+2+1所以1315最后可表示為:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)輸入格式正整數(shù)(1<=n<=20000)輸出格式符合約定的n的0,2表示(在表示中不能有空格)樣例輸入137樣例輸出2(2(2)+2+2(0))+2(2+2(0))+2(0)樣例輸入1315樣例輸出2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)提示用遞歸實(shí)現(xiàn)會(huì)比較簡(jiǎn)單,可以一邊遞歸一邊輸出
package com.sihai.advance;import java.util.*; import java.math.*; /* * 1、先把一個(gè)整數(shù)變成二進(jìn)制字符串,確定二進(jìn)制1的個(gè)數(shù)N,然后按照二進(jìn)制冪指數(shù)按照特定格式輸出, * 2、使用二進(jìn)制字符串的從左到右數(shù)的第一個(gè)1 * 3、如果冪指數(shù)k為0或者2,輸出2(k), * 4、如果冪指數(shù)為1輸出2 * 5、如果冪指數(shù)大于2,輸出2(,然后調(diào)用自身傳遞k,最后輸出) * 6、如果1的用的次數(shù)小于N,輸出+,否則不輸出 */ public class Main{ private static int find_one(String str_bin_val) { int count=0; for(int k=0;k<str_bin_val.length();k++) { if(str_bin_val.charAt(k)=='1') count++; } return count; } private static void bin_print(int a) { String str_bin=Integer.toBinaryString(a); int one_count=0; int one_sum=find_one(str_bin); int len=str_bin.length(); int k=len-1; for(int i=0;i<len;i++) { if(str_bin.charAt(i)=='1') { if(k==0||k==2) { System.out.print("2("); System.out.print(k); System.out.print(")"); } else if (k==1) { System.out.print("2"); } else { System.out.print("2("); bin_print(k);//遞歸調(diào)用 System.out.print(")"); } one_count++; if(one_count<one_sum)//最后的不應(yīng)該輸出+號(hào)的 System.out.print("+"); } k--; } } public static void main(String[] args) { Scanner sc=new Scanner(System.in); int src=sc.nextInt(); bin_print(src); } }
總結(jié)
以上是生活随笔為你收集整理的蓝桥杯-2的次幂表示(java)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯-前缀表达式(java)
- 下一篇: 蓝桥杯- 图形显示(java)