这不是一个功课问题,我只是好奇。如果我有一个计算3位数字的程序,比如123,我怎么才能得到“1”?我试图在最后打印一条消息,说“(第一个数字)告诉你......和(最后两位数字)告诉你......”但我不确定如何保存或获得那个单数字。有任何想法吗?除了使用数组之外,这是一种更简单的方法吗?谢谢。
答案 0 :(得分:6)
您可以使用整数除法100
:
#include <stdio.h>
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 ) ;
如果您可以从上到后以相反的顺序显示您的数字,则此方法不需要任何额外的存储空间,否则您可以将结果存储在数组中。
答案 1 :(得分:2)
以下是一个示例:
#include <stdio.h>
#include <math.h>
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;
}
答案 2 :(得分:-1)
如果你想以简单的方式做,我的意思是,如果你想让它只为一个数字编程,例如123,那么Shafik的第一个例子就足够了。
如果您想从末尾取出数字,那么Shafik的第二个例子就足够了。
欢迎提出建议,如果有人看到改进,谢谢:)
从一开始就拿出数字怎么样,这是我对你的问题的不同看法,我从头开始取数字:
#include<stdio.h>
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;
}
重要 - 如果用户输入的数字多于指定的数字,则使用数组存储数字时,会打印额外的数字作为数组的第一个元素,正如我所说,您可以进一步改进此程序如果你想要并检查用户输入的位数,祝你好运:)
注意 - 这只是查看问题的另一种方式,两种解决方案最终都会产生相同的结果。我只想这样说。