如何从整数20230302中提取前4位、中间2位和后2位并分别存储?
提取整数中的指定分段数字
针对你需要从整数20230302中提取前4位、中间两位、最后两位到不同变量的需求,这里给你两种实用的实现方法:
方法一:数学运算(适合固定位数的整数)
因为目标数字是固定8位,直接用除法和取模运算就能快速拆分:
#include <stdio.h> int main() { int num = 20230302; int year = num / 10000; // 20230302 / 10000 = 2023 int month = (num % 10000) / 100; // 先取后4位0302,再除以100得到03 int day = num % 100; // 取最后两位02 printf("年份:%d,月份:%d,日期:%d\n", year, month, day); return 0; }
这种方法效率高,不需要额外的字符串操作,适合位数固定的场景。
方法二:字符串处理(灵活适配不同位数)
如果后续数字位数可能变化,把整数转成字符串后截取子串再转回整数会更灵活:
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int num = 20230302; char str[20]; sprintf(str, "%d", num); // 把整数转成字符串 int year = atoi(str); // 直接取前4位(字符串前4个字符就是"2023") int month = atoi(str + 4); // 从第5个字符开始取两位,即"03" int day = atoi(str + 6); // 从第7个字符开始取两位,即"02" printf("年份:%d,月份:%d,日期:%d\n", year, month, day); return 0; }
注意:atoi会自动忽略前导零,所以"03"转成整数后就是3,如果需要保留前导零的显示,输出时要用%02d格式。
你原来的代码是逐个拆分每一位数字,和提取连续多位的需求不匹配,所以用上面两种方法更直接。
内容的提问来源于stack exchange,提问作者DHEERAJ SWAROOP S M
相关产品推荐
相关产品推荐

