首页 > 试题广场 >

skew数

[编程题]skew数
  • 热度指数:23583 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
在 skew binary 表示中,第 k 位的值 x[k] 表示 x[k]×(2^(k+1)-1)。每个位上的可能数字是 0 或 1,最后面一个非零位可以是 2,例如,10120(skew) = 1×(2^5-1) + 0×(2^4-1) + 1×(2^3-1) + 2×(2^2-1) + 0×(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44。前十个 skew 数是 0、1、2、10、11、12、20、100、101、以及 102。

输入描述:
输入包括多组数据,每组数据包含一个 skew 数。


输出描述:
对应每一组数据,输出相应的十进制形式。结果不超过 2^31-1。
示例1

输入

10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000

输出

44
2147483646
3
2147483647
4
7
1041110737
【避免溢出】受到java int整型最大2147483647的限制,直接代入2^(k+1) -1 会发现得到2147483646,可以拆成2^k-1+2^k。
发表于 2022-06-29 22:25:43 回复(0)
两种思路,一种是转换的思想,一种是取该字符和0字符的差值
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = 0;
        while (sc.hasNext()) {
            num = 0;
            String s = sc.next();
            int len = s.length();

            for (int i = 0; i < len; i++) {
                //方法一
                //运行时间:32ms
                //占用内存:10460k
                char c = s.charAt(i);       //String-->char
                String ss = String.valueOf(c);  //char-->String
                int k = Integer.parseInt(ss);
                //String-->int      若Integer integer = Integer.valueOf(ss);

                //方法二
                //运行时间:31ms
                //占用内存:10528k
//                int k = s.charAt(i) - '0';    //char-->int

                num += k * (Math.pow(2, len - i) - 1);

            }

            System.out.println(num);

        }
    }
}



发表于 2021-01-26 20:51:19 回复(0)
Java 解法
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            String s = scanner.nextLine();
            int sum=0;
            for (int i = 0,len=s.length(); i < len ; i++) {
                sum+= (s.charAt(i)-'0')*(Math.pow(2,len-i)-1);
            }
            System.out.println(sum);
        }
    }
}


发表于 2020-03-07 21:41:50 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String line = sc.nextLine();
            System.out.println(method(line));
        }
    }
    public static int method(String line){
        int result = 0;
        int len = line.length();
        for (int i = 0; i < len; i++) {
            result += (line.charAt(i) - '1' + 1) * (Math.pow(2, len-i) - 1);
        }
        return result;
    }
}
发表于 2017-10-09 17:14:33 回复(0)