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
相关产品推荐
相关产品推荐

