You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:47:34