已知一个正整数n,(3 <= n <= 15),将所有n的乘方幂以及所有n的乘方幂(有限个且互不相等)之和组成一个递增序列。例如,当n为4时,该序列为:
1, 4, 5, 16, 17, 20, 21……
(4^0, 4^1, 4^0+4^1, 4^2, 4^0+4^2, 4^1+4^2, 4^0+4^1+4^2……)
请求出该序列的第K项(10进制)。
输入只有1行,为2个正整数,两数之间用一个空格隔开:
n K
(n, K的含义与上述描述一致, 且3<=n<=15, 10<=K<=1000)。
输出为计算结果,为一个正整数(注意在所有测试数据中,结果均不会超过2.1*10^9)。整数前不要有空格或其他任何符号。
3 100
981
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int c = 0; int i = 0; int[] arr = new int[k]; while(c<k){ int tmp = (int) Math.pow(n,i++); arr[c++] = tmp; int len = c; for(int j=0;j< len-1 ;j++){ if(c>=k){ break; } arr[c++] = tmp + arr[j]; } } Arrays.sort(arr); System.out.println(arr[k-1]); } }
/* 思路:将k变成二进制后,对应位上为1则表明n的次数 例如: n = 4, k = 5 由于 5 的二进制数为 101 那么对应的数 n^0 + n^2 k = 6 --- 110 n^1 + n^2 */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] str = br.readLine().split(" "); int n = Integer.parseInt(str[0]); int k = Integer.parseInt(str[1]); String bin = Integer.toBinaryString(k); int sum = 0; for(int i = bin.length()-1,j = 0;i>=0;i--){ int temp = (bin.charAt(i) == '1')?1:0; sum = sum + temp*(int)Math.pow(n,j++); } System.out.println(sum); } }
import java.util.Scanner; public class Main { //就是将k转成2进制,比如k=6,n=4,k的2进制为110,然后以n进制输出来。即1*4^2+1*4^1+0*4^0 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //进制基数 int n = scanner.nextInt(); //第k个数 int k = scanner.nextInt(); //转化为二进制字符串 String s = Integer.toBinaryString(k); int sum=0; for (int i = 0,len=s.length(); i <len; i++) { int bit=s.charAt(i)=='1'?1:0; sum+=bit*Math.pow(n,len-i-1); } System.out.println(sum); } }