如何用C语言拆分十进制数152799920并分别存储到p1、p2、p3?
嘿,要实现这个需求其实挺简单的,有两种常用的思路,我给你一步步讲清楚:
方法一:用数学运算直接拆分
这种方法效率很高,完全基于数值运算,不需要额外的字符串处理。因为你的目标数字152799920是固定的9位,前3位、中间3位、最后3位刚好对应我们要的三个部分:
p1是前3位,只需要把原数除以10^6(也就是1000000),整数除法会自动舍弃后面的位数,得到152;p2是中间3位,先把原数除以10^3(1000)去掉最后3位,得到152799,再对1000取模,就能拿到中间的799;p3是最后3位,直接对1000取模就行。
对应的C代码示例:
#include <stdio.h> int main() { int original_num = 152799920; int p1, p2, p3; // 拆分逻辑 p1 = original_num / 1000000; p2 = (original_num / 1000) % 1000; p3 = original_num % 1000; // 输出验证 printf("p1 = %d\np2 = %d\np3 = %d\n", p1, p2, p3); return 0; }
方法二:转成字符串后截取拆分
这种方法更直观,适合对字符串操作比较熟悉的场景。我们先把数字转成字符串,然后直接截取对应位置的子串,再转成整数即可:
对应的C代码示例:
#include <stdio.h> #include <stdlib.h> // 用到atoi函数,需要包含这个头文件 int main() { int original_num = 152799920; char num_str[10]; // 9位数字加字符串结束符,10个位置足够 int p1, p2, p3; // 把数字转换成字符串 sprintf(num_str, "%d", original_num); // 截取对应位置的子串并转成整数 p1 = atoi(num_str); // 从字符串开头截取前3位 p2 = atoi(num_str + 3); // 从第4个字符(索引3)开始截取3位 p3 = atoi(num_str + 6); // 从第7个字符(索引6)开始截取3位 // 输出验证 printf("p1 = %d\np2 = %d\np3 = %d\n", p1, p2, p3); return 0; }
两种方法的小提示
- 如果你的需求是固定处理这个9位数字,两种方法都能完美解决;
- 如果后续需要处理不同位数的数字,数学运算需要调整除数和取模的数值,而字符串处理只需要调整截取的起始索引,灵活性更高;
- 注意原数字的范围:
152799920小于2^31-1(int类型的最大值),所以用int存储完全没问题,如果是更大的数字,建议改用long类型避免溢出。
内容的提问来源于stack exchange,提问作者KSung
相关产品推荐
相关产品推荐

