gpt4 book ai didi

c - 将 int 拆分为单个数字。如何处理零

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:16 24 4
gpt4 key购买 nike

我正在尝试创建一个函数,它将接受一个 int 并分别返回最左边的数字和其余数字。

int idigitizer(int *number) {
int i = 1;
int head = 0;
int tmp = 0;

tmp = *number;
while (tmp > 9) {
if ((tmp/i) < 10) {
head = tmp/i;
*number = *number - (head*i);
return head;
} else {
i = i*10;
}
}
number = 0;
return tmp;
}

idigigitizer 返回数字最左边的部分,*number 将携带其余部分。我将在我的 main 中有一个循环,它将继续调用 idigigizer,直到号码的所有数字都分开。问题是我不知道如何处理零以及如何在完成最后一位数字后正确终止此过程。欢迎任何帮助。提前致谢。

编辑:为了更清楚。我不希望数字中间可能的零丢失。如果我得到数字 100047 作为输入,我希望 idigigizer 返回:

return - *number
100047
1 00047
0 0047
0 047
0 47
4 7
7

最佳答案

我会用这样的东西代替:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int getFirstDigit( int number );
int getRestOfNumber( int number );
int getNumberOfMissingZeros (int number, int restOfNumber);

int main(int argc, char* argv[]){

int x = 500574;
int firstDigit;
int restOfNumber;

int n; /* loop index */

firstDigit = getFirstDigit(x);
restOfNumber = getRestOfNumber(x);

printf("The first digit of %d is %d.\n",x,firstDigit);
printf("The rest of the number is ");

for( n = 0; n<getNumberOfMissingZeros(x,restOfNumber); ++n ){
printf("0");
}

printf("%d.",restOfNumber);

return EXIT_SUCCESS;
}

int getFirstDigit( int number ){

return number / (int)floor( pow(10,floor(log10( (double)number ))) );

}

int getRestOfNumber( int number){

return number % (int)floor( pow(10,floor(log10( (double)number ))) );

}

int getNumberOfMissingZeros (int number, int restOfNumber){

int digitsOriginally;
int digitsInRestOfNumber;

digitsOriginally = floor(log10( (double)number ) );
digitsInRestOfNumber = floor(log10( (double)restOfNumber ) );

return digitsOriginally - digitsInRestOfNumber - 1;

}

神奇之处在于表达式 (int)floor( pow(10,floor(log10( (double)number ))) ); 这会得到 大小值,例如 52330,它将返回 10000,因为 52330 中有五位数字。这使得提取最高位变得容易。

关于c - 将 int 拆分为单个数字。如何处理零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com