任务描述
程序每次读入一个至少4位数的正整数,然后输出其后4位按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入57000,输出应该是7。
输入格式:
每个测试的数都是一个正整数。
输出格式:
输出逆序的数。
思路分享:
叠甲:萌新,语句基本学会一点做一点相关题目,史山请见谅,因为站内大佬发的有点看不懂,请轻喷。
本质还是对if else的应用,通过一步一步检测来筛掉错误条件,这个办法适用于大部分有限区间的分支问题。 但对于没有区间的正整数求和,我更喜欢用for的无条件循环, 对于取最大数或者中间数,用if配合比大小,重新分配(站内有大佬发过代码,我也是学习而来) 站内还有一种思路就是赋值检测是不是0,这样可以把所有零删掉,也可以改一下代码变成删掉前导的0.
具体代码用途已注释,如有其他见解欢迎评论区留言。
#include<stdio.h>
int main()
{
int n,a,b,c,d;
//对整形字母进行定义,最好使用易懂的英文//
scanf("%d",&n);//用户输入//
a=n%10;//个位,也即倒序输出第一位//
b=(n/10)%10;//十位,也即倒序输出第二位//
c=(n/100)%10;//百位,也即倒序输出第三位//
d=(n/1000)%10;//千位,也即倒序输出第四位//
if ((a==0)&&(b==0)&&(c==0)){
//开始判断,在前三位都为0的情况下,输出第四位//
//第四位为零也无所谓,题目只要求不输出前导的0,即不能00,但可以0//
printf("%d",d);
}else if ((a==0)&&(b==0)&&(c!=0)){
//在前两位都为0,且第三位不为零的情况下,输出第三位和第四位//
//因为只要求不输出前导的0,在我们找到一个非零数后,这个非零数后面的数就不需要判断了//
printf("%d%d",c,d);
}else if ((a==0)&&(b!=0)){
//在第一位为零,第二位不为零的情况下,输出第二位第三位第四位//
printf("%d%d%d",b,c,d);
}else if ((a!=0)){
//在第一位不为零的情况下,输出全部位数//
printf("%d%d%d%d",a,b,c,d);
}else {//此项为检查项,用于检测是否把==只写成=,从而导致输出错误//
printf(")");
}
return 0;
}