如何表示用C分隔的一位十进制数

How to represent one decimal number separated by C

我想把用十进制数表示的152799920分成152/799/920个表达式,分别存储在p1p2p3中. 也就是说,当我后面输出p1p2p3的值时,p1 = 152p2 = 799p3 = 920就是结果。

如何在C代码中实现上述方法?

对于您的问题, 只需使用整数除法 / 和模数 % 运算符即可获得所需的数字。在这种情况下,它将是

int main()
{
    int n = 152799920;
    int p1 = n / 1000000; // Extract most significant three digits
    int p2 = (n % 1000000)/1000; // Extract middle three digits
    int p3 = n % 1000; // Extract least significant three digits
    printf("%d/%d/%d", p1, p2, p3);

    return 0;
}

但是提取任意范围的数字呢?假设您索引了十进制数字。最右边最小的数字称为数字 0,而最大的(在本例中)为 8。请注意,数字的索引对应于以 10 为底的科学计数法,这意味着数字 8 指的是 10^8 位值.

提取int形式的LSDMSD范围内的数位,解法为这种形式(注意要手动替换[MSD][LSD] 它们在实际代码中带有数字):

int p = (n % (int) 1E[MSD + 1])/LSD

如果您想提取比给定 LSD 更重要的数字,它会减少到 int p = n / LSD

因此,您的解决方案也可以使用科学的 E-notation 表示如下。请注意,在计算余数时必须转换为 int,因为余数运算符不适用于 double

int main()
{
    int n = 152799920;
    int p1 = n / 1E6; // Extract digits 6 and higher
    int p2 = (n % (int) 1E6)/ 1E3; // Extract 3 to 5
    int p3 = (n % (int) 1E3)/ 1E0; // Extract 0 to 2
    printf("%d/%d/%d", p1, p2, p3);

    return 0;
}

你可以直接复制我的两个答案作为主要方法全部编译。您的结果应该如预期的那样 152/799/920

您需要数字还是字符串形式的数字?

如果是字符串,使用snprintf获取数字,然后使用strncpy复制出3的运行。

如果是数字,用模除法除以1000取余数,然后用整数除以1000进行移位,重复3次