c-这两个while循环如何将整数分隔为数字



代码即将把一个整数分隔成数字,代码可以工作,但我在如何将两个"而";一起工作。

#include <stdio.h>
int main() {
int num, temp, factor = 1;
printf("Enter a 5 digit number: ");
scanf("%d", &num);
temp = num;
while (temp) {
temp = temp / 10;
factor = factor * 10;
}
while (factor > 1) {
factor = factor / 10;
printf("%d   ", num / factor);
num = num % factor;
}
return 0;
}
#includeint main(({int num,temp,factor=1;printf("输入5位数字:"(;scanf("%d",&num(;60403temp=num;60403//while(temp({temp=温度/10;6040因子=因子*10;10temp=温度/10;604因子=因子*10;100temp=温度/10;60因子=因子*10;1000temp=温度/10;6.因子=因子*10;10000temp=温度/10;0因子=因子*10;100000//}//而(因子>1({因子=因子/10;10000printf("%d",num/factor(;60403/10000为6num=num%因子;403因子=因子/10;1000printf("%d",num/factor(;403/1000为0num=num%因子;403因子=因子/10;100printf("%d",num/factor(;403/100是4num=num%因子;3.因子=因子/10;10printf("%d",num/factor(;3/10为0num=num%因子;3.因子=因子/10;1.printf("%d",num/factor(;3/1是3num=num%因子;0//}返回0;}

与其说这是一个编程问题,不如说它是一个基本的算术问题,你提到while会让你感到困惑,但你必须把代码看作一个整体:

//...
temp = num;

存储要提前使用的原始输入。


while (temp) {
temp = temp/10;
factor = factor*10;
}

这个循环将值temp除以10,直到结果为0,此时它将评估为false并退出循环,请记住,C中的整数除法截断了结果,例如2/3 ~ 0.67 = 0,该因子只是累加获得0所需的除法数,在这种情况下是100000的5倍。


while (factor>1) {
factor = factor/10;
printf("%d   ", num/factor);
num = num % factor;
}

这里也有同样的原理,第一个循环将数字除以因子,所以12345 / 10000 = 1.2345,但由于整数除法截断了小数部分,所以得到1,接下来应用模运算符(%(,它所做的是返回除法的小数部分,因此2345,下一个循环2345 / 1000 = 2.345 = 2,小数部分345,依此类推


注意,由于您知道原始输入中的位数,您甚至不需要第一个循环,您可以简单地对因子进行编码:

#include <stdio.h>
int main() {
int num, factor;
printf("Enter a 5 digit number: ");
scanf("%d", &num);
factor= 100000; //<--
while (factor > 1) {
factor = factor / 10;
printf("%d   ", num / factor);
num = num % factor;
}
return 0;
}

最新更新