所以,我将这两种算法放在一起:
int digitCount(int num){
int count;
while (num) {
num /= 10;
count++;
}
return count;
}
int digitSplit(int num, int digit) {
int i, base = 1, count = digitCount(num);
for(i = 1; i <= count + 1 - digit; i++)
base *= 10;
return num % base / (base / 10);
}
虽然我知道它们可能不是最佳的,但是digitSplit给了我一些非常奇怪的行为:
for (i = 1; i < 4; i++)
printf("%d", digitSplit(432, i));
无论设置如何,这个都会崩溃。
printf("%d, %d, %d", digitSplit(432, 1), digitSplit(432, 2), digitSplit(432, 3));
这个推出0,0,2。
printf("%d", digitSplit(432, 1));
printf("%d", digitSplit(432, 2));
printf("%d", digitSplit(432, 3));
这些分别推出了4 3 2,否则会导致程序崩溃=&gt; for
- 环
不知道为什么会发生这种情况,我的digitSplit
是原因,但0,0,2是怎么来的?
答案 0 :(得分:1)
C中可能出现的一些问题: 如果不初始化变量,则它具有最后一次更改内存位的值。使用值初始化变量总是很好的形式,但在C中它是非常重要的:
int digitCount(int num){
int count = 0;
while (num) {
num /= 10;
count++;
}
return count;
}
您在digitSplit()中返回的内容不正确。你想要移动一个特定的数字,使它在一个位置,然后用数字10隔离数字。首先,我们必须将我们想要的数字移到一个地方,将数字除以10 ^(计数位) ,而不是10 ^(计数+ 1位数)。设10 ^(count-digit)= base,所以我们有 (NUM /碱)。现在我们只需要得到一个人的位置。我们用mod:
做到这一点int digitSplit(int num, int digit) {
int i, base = 1, count = digitCount(num);
for(i = 1; i <= count - digit; i++)
base *= 10;
return (num/base)%10;
}