如何从3位整数中提取单个数字?

这不是一个功课问题,我只是好奇。 如果我有一个计算3位数字的程序,比如123,我怎么才能得到“1”? 我试图在最后打印一条消息,说“(第一个数字)告诉你……和(最后两位数字)告诉你……”但我不确定如何保存或获得那一个数字。 有任何想法吗? 除了使用数组之外,这是一种更简单的方法吗?谢谢。

您可以使用100除以整数除法:

 #include  int main() { printf( "%d\n", 123/100 ) ; return 0 ; } 

更通用的方法是使用后续的模数乘以10和整数除以10来移除最后一位数,直到数字小于10

 int num = 123 ; while( num >= 10 ) { printf( "%d\n", num % 10 ) ; num = num / 10 ; } printf( "%d\n", num ) ; 

如果您可以从上到后以相反的顺序显示数字,则此方法不需要任何其他存储,否则您可以将结果存储在数组中。

  • 获取数字的长度。
  • 迭代并获取每个数字。

这是一个示例:

 #include  #include  int main () { int n = 123, i; char buffer [33]; int len = n==0 ? 1 : floor(log10l(abs(n)))+1; for(i=n;len--; i=(int)(i/10)) buffer[len] = (i%10); printf("%d", buffer[0]); // First Digit printf("%d", buffer[1]); // Second Digit printf("%d", buffer[2]); // Third Digit... so on return 0; } 

如果你想以简单的方式做,我的意思是,如果你想让它只为一个数字编程,例如123,那么Shafik的第一个例子就足够了。

如果您想从末尾取出数字,那么Shafik的第二个例子就足够了。

欢迎提出建议,如果有人看到改进,谢谢:)

如何从头开始取数字,这是我对你的问题的不同看法,我从头开始取数字如下:

 #include int main() { int di , i , num , pow = 1; setbuf ( stdout , NULL); printf ("enter the number of digits of the number\n");// specify at run time what will be the number of digits of the array. scanf ( "%d" , &di); int a[di]; printf ("enter the %d digit number:\n",di);// scanf ( "%d" , &num);//One thing is to be noted here that user can enter more digits than specified above , It is up to user to enter the specified digits , you can improve this program by making a check whether user enters the specified digits or not , better do it as exercise. while( di > 1 ) { pow = pow * 10; di--; } i = 0; while ( num > 0) { a[i]=num/pow; num=num%pow; pow=pow/10; i++; } printf("the digits from the beginning are :\n"); for(int j = 0 ; j < i ; j++) printf("%d\n",a[j]); return 0; } 

重要 - 当使用数组来存储数字时,如果用户输入的数字多于指定的数字,那么额外的数字将作为数组的第一个元素打印出来。正如我所说,如果你想要的话,你可以进一步改进这个程序并对用户进行检查输入数字,祝你好运:)

注意 - 这只是查看问题的另一种方式,两种解决方案最终都会产生相同的结果。 我只是想这样说。