1023 组个最小数

题目:

给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。

现给定数字,请编写程序输出能够组成的最小的数。

输入格式:

输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。

输出格式:

在一行中输出能够组成的最小的数。

输入样例:

2 2 0 0 0 3 0 0 1 0

输出样例:

10015558

代码:

 #include<stdio.h>
    using namespace std;
    int book[10];
    int main()
    {
        for(int i=0;i<=9;i++)
        {
            scanf("%d",&book[i]);
        }
        if(book[0]==0)
        {
            for(int i=1;i<=9;i++)
            {
                for(int j=0;j<book[i];j++)
                    printf("%d",i);
            }
            printf("\n");
        }
        else
        {
            for(int i=1;i<=9;i++)
            {
                if(book[i]!=0)
                {
                    book[i]--;
                    printf("%d",i);
                    break;
                }
            }
            for(int i=0;i<=9;i++)
            {
                for(int j=0;j<book[i];j++)
                    printf("%d",i);
            }
            printf("\n");
        }
        return 0;
    }

### 负小数的二进制表示方法 负小数在计算机中的二进制表示通常遵循 **IEEE 754 标准**,该标准定义了一种统一的方式来表示浮点数。为了理解这一过程,我们需要掌握以下几个核心概念: #### 1. 符号位 (Sign Bit) 符号位用于区分数的正负。 - 如果符号位为 `0`,则表示正数。 - 如果符号位为 `1`,则表示负数。 #### 2. 尾数 (Significand/Mantissa) 尾数是以科学记数法的形式来表达的小数部分,在 IEEE 754 中采用规格化的形式(即隐藏高有效位)。对于单精度浮点数,尾数占用 23 位,而双精度浮点数占用 52 位[^3]。 #### 3. 指数 (Exponent/阶码) 指数用来调整小数点的位置。它通过移码的方式存储,其中偏置量(Bias)决定了实际与存储之间的关系: - 对于单精度浮点数,偏置量为 `127`。 - 对于双精度浮点数,偏置量为 `1023`。 因此,实际的指数可以通过以下公式计算得出: \[ \text{实际指数} = \text{存储指数} - \text{偏置量} \] #### 4. 补码的作用 虽然补码主要用于整数的表示,但在处理负小数时,仍然会间接涉及补码的概念。具体来说,当我们将一个小数转换为其对应的二进制形式后,再按照 IEEE 754 的规则进行编码时,实际上是在操作其绝对的部分并标记符号位为 `1` 来表明它是负数[^2]。 --- ### 转换流程实例 假设我们要将 `-0.15625` 转换成 IEEE 754 单精度浮点数格式: #### 步骤一:确定符号位 由于给定的是负数,故符号位应设为 `1`. #### 步骤二:将十进制小数转换成二进制小数 先忽略符号,仅考虑绝对 \( |{-0.15625}| = 0.15625 \) 。将其转换为二进制小数得到 `0.00101` 或者规范化后的形式 `1.01 × 2^{-3}`[^4]。 #### 步骤三:求解指数 根据上面的结果可知,我们的基数是 \(2^{-3}\),那么未加偏置的实际指数就是 `-3`。考虑到这是单精度情况下的运算,需加上偏置量 `127` 得到终存储用的指数: \[ \text{存储指数} = -3 + 127 = 124_{(10)} = 01111100_{(2)} \] #### 步骤四:构建尾数 去掉隐含的首位 `1.` 后剩下的部分作为尾数保存下来,这里即是 `.0100...`(共补充至23位)。 综上所述,完整的比特串将是这样的结构合起来形成的一个32bit序列。 --- ```python def decimal_to_ieee754(number, precision='single'): import struct if precision == 'single': fmt = '!f' # Single Precision Float Format elif precision == 'double': fmt = '!d' # Double Precision Float Format packed = struct.pack(fmt, number) unpacked_bits = ''.join(format(byte, '08b') for byte in packed) return unpacked_bits print(decimal_to_ieee754(-0.15625)) # Example usage with single precision. ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值