我想把用十进制数表示的152799920
分成152/799/920
表达式分别存入p1
,分别为 p2
和 p3
。
也就是说,当我后面输出p1
、p2
、p3
的值时,p1 = 152
, p2 = 799
, p3 = 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形式从LSD
到MSD
中提取一个int的数字范围,解决方案将是这种形式(注意你必须手动替换[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
。
关于c - 如何表示用C分隔的一位十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50361164/