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

C语言分离整数首位和次位函数的正确性咨询

你的整数首位/次位数字分离函数问题解答

咱们来逐个拆解你写的这两个函数,把问题和修正方案说清楚:

一、首位数字函数 first_digit

首先说那个空的if(number / 10)语句——它完全没用!既没有执行任何逻辑,也不会影响后续的return结果,直接删掉就行。

但更重要的是,这个函数本身的逻辑有问题:

  • 当输入是个位数(比如5、-3)时,number/10会返回0,但显然个位数的首位就是它自己,而不是0;
  • 当输入是多位数负数(比如-123)时,number/10返回-12,这也不是真正的首位数字(首位应该是-1或者1,取决于你是否要保留符号)。

如果要写出能正确处理所有整数的首位数字函数,可以用循环把数字“缩”成个位数:

#include <stdlib.h> // 要用到abs函数

int first_digit(int number) {
    // 先处理负数,取绝对值(如果需要保留符号,删掉这行即可)
    number = abs(number);
    // 循环除以10,直到数字变成个位数
    while (number >= 10) {
        number /= 10;
    }
    return number;
}

这个版本不管输入是个位数、多位数还是负数,都能返回正确的首位数字。

二、次位数字函数 second_number

你写的这个函数其实返回的是最后一位数字,完全不是次位!比如输入123,123%10返回3,但次位应该是2;输入45,它返回5(如果你的需求里两位数的次位是个位,那这时候是对的,但三位数及以上就错了)。

要正确获取从左数第二位的数字,我们可以先把数字“缩”成前两位,再取个位:

#include <stdlib.h>

int second_digit(int number) {
    int original = abs(number);
    // 如果是个位数,没有次位,返回-1作为标记(你也可以改成其他符合需求的默认值)
    if (original < 10) {
        return -1;
    }
    // 循环除以10,直到数字只剩前两位
    while (original >= 100) {
        original /= 10;
    }
    // 现在original是两位数,取个位就是次位
    return original % 10;
}

测试几个例子:

  • 输入123 → 缩成12 → 返回2,正确;
  • 输入45 → 直接取45%10返回5,正确;
  • 输入6 → 返回-1,表示无次位;
  • 输入-789 → 缩成78 → 返回8,符合预期。

内容的提问来源于stack exchange,提问作者Skydance

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:39:47