题目:题目链接
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数。
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321
代码实现:
最简单的思路是直接提取各位的数字然后合成一个新的是三位数输出
具体讲解详见代码注释
#include<stdio.h>
int main()
{
int a,b,c,d;
scanf("%d",&a);
b=a/100;//提取百位数
c=(a/10)%10;//提取十位数
d=a%10;//提取个位数
printf("%d",d*100+c*10+b);
return 0;
}
稍微复杂的是将各位数字全部提取出来,对零进行判断,非零的数直接输出
#include<stdio.h>
int main()
{
int a,b[10]={0},num=0;
int flag=0;//一开始想用bool,但是。。。用于判断开头是不是0
scanf("%d",&a);
while(a>0)//提取个位数字
{
b[num]=a%10;
num++;//计数变量,用于填充数组
a=a/10;//下一位
}
for(register int i=0;i<num;i++)
{
if(flag==0)
{
if(b[i]!=0)//开头不是零正常输出
{
flag=1;//表示开头不是零
printf("%d",b[i]);
}
if(b[i]==0)//如果开头是零
{
continue;//继续循环
}
}
else
{
printf("%d",b[i]);//以判断过开头就继续输出
}
}
return 0;
}
这个已经不限于三位数,但是由于使用循环实现的,如果数据太大可能会超时间。。。
还有一个基于第二种方法功能更加强大的代码,但实际上大同小异,可以帮助理解第二种方法。
#include <stdio.h>
int main() {
int a, num[10], pos = 0;
scanf("%d", &a);
while (a > 0) {
pos++;
num[pos] = a % 10;
a = a / 10;
}
printf("%d\n", pos);
for (register int i = 1; i <= pos; i++) {
printf("%d", num[i]);
}
printf("\n");
for (register int i = pos; i >= 1; i--) {
printf("%d ", num[i]);
}
return 0;
}
就酱哈(待更新)