575 - Skew Binary

本文介绍了一种特殊的进制——偏斜二进制,并提供了一个C++程序用于将偏斜二进制数转换为十进制数。偏斜二进制中,k位上的值代表2^(k+1)-1,且最低位可以为2。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Skew Binary 

When a number is expressed in decimal, the k-th digit represents a multiple of 10k. (Digits are numbered from right to left, where the least significant digit is number 0.) For example, 

\begin{displaymath}81307_{10} = 8 \times 10^4 + 1 \times 10^3 + 3 \times 10^2 + ......mes 10^1 +7 \times 10 0 = 80000 + 1000 + 300 + 0 + 7= 81307.\end{displaymath}

When a number is expressed in binary, the k-th digit represents a multiple of 2k. For example, 

\begin{displaymath}10011_2 = 1 \times 2^4 + 0 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 +1 \times 2^0 = 16 + 0 + 0 + 2 + 1 = 19.\end{displaymath}

In skew binary, the k-th digit represents a multiple of 2k+1 - 1. The only possible digits are 0 and 1, except that the least-significant nonzero digit can be a 2. For example, 

\begin{displaymath}10120_{skew} = 1 \times (2^5 - 1) + 0 \times (2^4-1) + 1 \tim......2 \times (2^2-1) + 0 \times (2^1-1)= 31 + 0 + 7 + 6 + 0 = 44.\end{displaymath}

The first 10 numbers in skew binary are 0, 1, 2, 10, 11, 12, 20, 100, 101, and 102. (Skew binary is useful in some applications because it is possible to add 1 with at most one carry. However, this has nothing to do with the current problem.)

Input 

The input file contains one or more lines, each of which contains an integer n. If n = 0 it signals the end of the input, and otherwise n is a nonnegative integer in skew binary.

Output 

For each number, output the decimal equivalent. The decimal value of n will be at most 231 - 1 = 2147483647.

Sample Input 

10120
200000000000000000000000000000
10
1000000000000000000000000000000
11
100
11111000001110000101101102000
0

Sample Output 

44
2147483646
3
2147483647
4
7
1041110737

给你一个数,是按照一个特殊的进制规格的。其中k位上代表了2^(k+1) -1 。然后就是求出十进制。水题

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int main ()
{
    char skew[50];
    int sum,i;
    while(cin>>skew)
    {
        sum=0;
        if (strcmp(skew,"0")==0) break;
        int len=strlen(skew);
        for (i=len-1; i>=0; i--)
            sum+=(skew[i]-'0')*(pow(2,len-i)-1);
        cout<<sum<<endl;
    }
    return 0;
}


<think>嗯,用户遇到了构建过程中的警告问题,包括未使用的变量和安装步骤缺失,还有可能涉及到时钟偏差和ZKOS_SOURCE_DIR的问题。首先,我需要根据提供的引用信息来分析可能的原因和解决方法。 首先,用户提到的是使用colcon和CMake进行构建。未使用的变量警告通常是因为在CMakeLists.txt中定义了一些变量,但后续没有使用到。比如可能在项目中定义了某个变量,比如设置了一个路径变量,但没有在add_executable或者add_library中使用,或者条件判断中定义了变量但条件未满足,导致变量未被使用。这时候CMake会发出警告。解决方法就是检查CMakeLists.txt,找到未使用的变量并删除,或者确保它们被正确使用。比如用户提到的ZKOS_SOURCE_DIR,可能是在某个地方定义但没有被使用,需要检查相关部分。 接下来是安装步骤缺失的问题。CMake中的install()命令用于指定安装规则,如果项目中没有正确配置install目标,构建工具如colcon在安装时就会报错。用户需要检查CMakeLists.txt中是否包含install指令,比如安装目标文件、库、头文件或者配置文件。比如引用[2]提到不要使用预编译的Protobuf,可能用户的项目依赖某些需要安装的库,如果没有正确配置install,就会导致问题。解决方法就是添加相应的install命令,例如install(TARGETS ...)和install(DIRECTORY ...)。 关于时钟偏差警告,这通常是由于文件的时间戳比系统时间晚,可能发生在跨系统或虚拟机环境中。这会影响构建系统判断文件是否需要重新编译。解决方法包括同步系统时间,或者执行make clean后重新构建,或者使用touch命令更新文件时间戳。 然后是ZKOS_SOURCE_DIR的问题,这可能是一个自定义的CMake变量,用户可能在CMakeLists.txt中设置了该变量但未使用,或者路径设置有误。需要检查该变量的定义和使用位置,确保其正确性,或者用PROJECT_SOURCE_DIR替代,如果可能的话。比如引用[1]、[3]、[4]都提到了PROJECT_SOURCE_DIR和CMAKE_SOURCE_DIR的区别,用户可能需要检查是否应该使用这些预定义变量而不是自定义的ZKOS_SOURCE_DIR。 另外,用户可能在使用colcon build时没有正确配置安装目标,导致警告。需要确保每个库或可执行文件都有对应的install命令,这样colcon才能正确打包和安装。 总结下来,步骤应该是:检查未使用变量并清理;添加install目标;处理时钟偏差;替换或正确使用ZKOS_SOURCE_DIR。同时,可能需要参考引用中的CMake变量说明,比如PROJECT_SOURCE_DIR的正确使用,避免自定义变量导致的问题。</think>在构建过程中处理CMake警告和安装配置问题,可按以下步骤分析和解决: ### 一、未使用变量警告 **典型警告形式**:`CMake Warning at ... : Manually-specified variables were not used by the project: ZKOS_SOURCE_DIR` **解决方法**: 1. **检查变量定义**:确认在CMake配置命令中是否传递了未使用的变量 例如:`-DZKOS_SOURCE_DIR=...`,但在CMakeLists.txt中未引用该变量 2. **删除冗余变量**:移除CMake命令中不必要的`-D`参数 3. **同步变量使用**:若确实需要该变量,需在CMakeLists.txt中通过`if(DEFINED ...)`或`message()`验证其有效性 ### 二、安装目标缺失 **典型警告形式**:`Package 'pkg_name' has no installation candidate (missing install(...) in CMakeLists.txt?)` **解决方法**: 1. **添加install指令**:在CMakeLists.txt末尾添加安装规则 ```cmake install(TARGETS your_target RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib) install(DIRECTORY include/ DESTINATION include) ``` 2. **验证安装路径**:通过`CMAKE_INSTALL_PREFIX`指定安装目录 ```bash colcon build --cmake-args -DCMAKE_INSTALL_PREFIX=your_path ``` ### 三、时钟偏差警告 **典型警告形式**:`Warning: File 'xxx' has modification time X s in the future` **解决方法**: 1. **同步系统时间**:使用`ntpdate`或系统时间同步工具 2. **强制重置时间戳**:执行`find . -exec touch {} \;`更新所有文件时间 3. **清理后重建**: ```bash rm -rf build/ install/ log/ colcon build --cmake-clean-first ``` ### 四、ZKOS_SOURCE_DIR的特殊处理 **问题场景**:自定义源码目录变量未正确关联项目结构 **建议方案**: 1. **优先使用标准变量**:替换为`PROJECT_SOURCE_DIR`(引用[1][3][4]) ```cmake message(STATUS "Project source dir: ${PROJECT_SOURCE_DIR}") # 验证路径 include_directories(${PROJECT_SOURCE_DIR}/include) ``` 2. **显式声明路径关系**:若必须使用自定义变量,需确保与工程结构匹配 ```cmake set(ZKOS_SOURCE_DIR ${PROJECT_SOURCE_DIR} CACHE PATH "Custom source directory") ``` ### 五、完整优化示例 ```cmake cmake_minimum_required(VERSION 3.10) project(zkos) # 清理未使用变量 unset(UNUSED_VAR CACHE) # 示例:移除缓存中的冗余变量 # 添加安装目标 add_executable(main src/main.cpp) install(TARGETS main DESTINATION bin) # 使用标准路径变量 message(STATUS "Project binary dir: ${PROJECT_BINARY_DIR}") # 引用[4] target_include_directories(main PUBLIC ${PROJECT_SOURCE_DIR}/include) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值