如何表示由C分隔的一个十进制数

时间:2018-05-16 01:18:48

标签: c decimal division

我想将以十进制数表示的152799920分为152/799/920个表达式,并将它们分别存储在p1p2p3中。 换句话说,当我稍后输出p1p2p3的值时,p1 = 152p2 = 799p3 = 920是结果。

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

2 个答案:

答案 0 :(得分:2)

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

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提取int的数字范围,解决方案将采用此格式(请注意,您必须手动替换[MSD],{{ 1}}它们在实际代码中带有数字):

[LSD]

如果您想提取比给定int p = (n % (int) 1E[MSD + 1])/LSD 更重要的数字,则会缩减为LSD

因此,您的解决方案也可以使用科学E表示法在下面表达。请注意,在计算余数时,您必须转换为int p = n / LSD,因为其余运算符不适用于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; }

答案 1 :(得分:1)

您需要数字作为数字还是字符串?

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

如果是数字,则使用模数除法得到除以1000后的余数,然后使用整数除以1000来移位数,并重复3次。