思路:n%10就能得到n的最后一位数,得到之后输出。在一定的条件下,多输出一个横杠连接它们,最后一个数之后不带横杠。
难点:n%10取余后,能得到最后一位数,但n的值会发生变化,循环后续的会随着n的变化产生错误。所以此时要用一个新的变量d去替代n来做取余,而n仅做/10去不断丢掉最后一位数。注意每次循环结束后,要把n的值再赋给d。因为最后一位数字输出后,不再输出横杠,要设置好n的范围。
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
//思路如下:
// n d
// 12345%10= 5;
// 12345/10= 1234;
// 1234%10 = 4;
// 1234/10 = 123;
// 123%10 = 3;
// 123/10 = 12;
// 12%10 = 2;
// 12/10 = 1;
// 1%10 = 1;
// 1/10 = 0;
do {
int d = n;//用d去替代n做取余
d %= 10;
printf("%d", d);
if (n >= 10) {//最后一次循环时,n已经是个位数,所以设置这个限制条件
printf("-");
}
n /= 10;//最后一次循环n/10结果是0余n,此时可以跳出循环
} while (n > 0);
printf("\n");
return 0;
}