从C中从最不重要开始的数字中获取数字非常简单:
#include <stdio.h>
int main()
{
int num = 1024;
while(num != 0)
{
int digit = num % 10;
num = num / 10;
printf("%d\n", digit);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是如何从第一个数字(此处为1)开始提取数字,该解决方案可以应用于任何数字?
对于数组来说这是微不足道的,但我不想使用数组,我不想使用逻辑运算符.
以下程序可以满足您的需求:
#include <stdio.h>
int main()
{
int num =0;
int power=1;
printf("Enter any number:");
scanf("%d",&num);
while(num>power)
power*=10;
power/=10;
while(num != 0)
{
int digit = num /power;
printf("%d\n", digit);
if(digit!=0)
num=num-digit*power;
if(power!=1)
power/=10;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
假设一个 32 位有符号数为正,那么作为一个简单的例子:
#include <stdio.h>
int main()
{
int rmdr;
int dvsr;
int quot;
scanf("%d", &rmdr); // read in number
dvsr = 1000000000;
while(0 >= (quot = rmdr / dvsr)){ // skip leading zeroes
rmdr %= dvsr;
dvsr /= 10;
if(dvsr == 1)
break;
}
while(dvsr){ // display number
quot = rmdr / dvsr;
printf("%1d", quot);
rmdr %= dvsr;
dvsr /= 10;
}
printf("\n");
return(0);
}
Run Code Online (Sandbox Code Playgroud)
或者稍微优化一下:
int main()
{
int rmdr;
int rm10;
int dvsr;
int quot;
scanf("%d", &rmdr); // read in number
rm10 = rmdr/10;
dvsr = 1;
while(dvsr <= rm10) // skip to 1st digit
dvsr *= 10;
while(dvsr){ // display number
quot = rmdr / dvsr;
printf("%1d", quot);
rmdr %= dvsr;
dvsr /= 10;
}
printf("\n");
return(0);
}
Run Code Online (Sandbox Code Playgroud)