题目标题: 逆序的三位数 题目作者: 翁恺 浙江大学
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321
思路1:这道题目最简单的办法就是,先把百位、十位、个位数字分别读入到a, b, c 中;然后计算num = c*100+b*10+a,这时num就是原三位数的逆序数了,并且不会出现前导0。
注意:输入1位整数用1d%
代码1:
#include <stdio.h>
int main () {
int num=0,a,b,c;
scanf("%1d%1d%1d", &a,&b,&c); // %1d 可以控制只输入一位整数
num = a+b*10+c*100;
printf("%d", num);
return 0;
}
思路2:先把百位、十位、个位数字分别读入到a, b, c 中;然后从后往前根据c, b, a 为不为零的情况输出。
注意:第二位b不是前导0的判断条件是 c != 0 || b != 0
代码2:
#include <stdio.h>
int main () {
int num=0,a,b,c;
scanf("%1d%1d%1d", &a,&b,&c); // %1d 可以控制只输入一位整数
if (c != 0) printf("%d", c); // c不是前导0,输出
if (c != 0 || b != 0) printf("%d", b); // b不是前导0,输出
printf("%d",a); // 最后一位不存在前导0的情况
return 0;
}
下面这些代码用到更多的语法,仅供参考:
代码3:
#include <stdio.h>
int main () {
int num,flag = 0; // 用flag=0 来标志当前的0是前导0
scanf("%d", &num);
for (int i = 0; i < 3; i++) { // 用for循环把下面的核心代码重复3遍
if (num%10 == 0 && flag == 0) { // 如果当前的0是前导0,不输出,直接对num整除10
num /= 10;
}
else { // 如果当前的位不是0,或者是0但不是前导0,则先输出当前位,再对num整除10
flag = 1; // 这时候别忘了标记flag = 1, 以后得0都不可能是前导0
printf("%d", num%10);
num /= 10;
}
}
return 0;
}
代码4:
#include <stdio.h>
int main () {
int i,A[3];
scanf("%1d%1d%1d",&A[0],&A[1],&A[2]);
for (i = 2; i >= 0; i--) {
if (A[i] != 0) break; // 先确定倒序后首次不为0的位置
}
for (;i >= 0; i--) { // 从倒序后首次不为0的位置倒序输出
printf("%d",A[i]);
}
return 0;
}
代码5:
#include <stdio.h>
int main () {
int i;
char A[3];
scanf("%s", A);
for (i = 2; i >= 0; i--) {
if (A[i] != '0') break; // 先确定倒序后首次不为0的位置
}
for (;i >= 0; i--) { // 从倒序后首次不为0的位置倒序输出
printf("%c",A[i]);
}
return 0;
}