C 练习实例29
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析:学会分解出每一位数,如下解释。
实例
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include <stdio.h>
int main( )
{
long a,b,c,d,e,x;
printf("请输入 5 位数字:");
scanf("%ld",&x);
a=x/10000; /*分解出万位*/
b=x%10000/1000; /*分解出千位*/
c=x%1000/100; /*分解出百位*/
d=x%100/10; /*分解出十位*/
e=x%10; /*分解出个位*/
if (a!=0){
printf("为 5 位数,逆序为: %ld %ld %ld %ld %ld\n",e,d,c,b,a);
} else if(b!=0) {
printf("为 4 位数,逆序为: %ld %ld %ld %ld\n",e,d,c,b);
} else if(c!=0) {
printf("为 3 位数,逆序为:%ld %ld %ld\n",e,d,c);
} else if(d!=0) {
printf("为 2 位数,逆序为: %ld %ld\n",e,d);
} else if(e!=0) {
printf("为 1 位数,逆序为:%ld\n",e);
}
}
以上实例输出结果为:
请输入 5 位数字:12345 为 5 位数,逆序为: 5 4 3 2 1
叮咚
126***9648@qq.com
其他解法:
以上实例输出结果为:
叮咚
126***9648@qq.com
火云
103***8583@qq.com
参考解法:
火云
103***8583@qq.com
半弧寻
ban***un@163.com
参考解法
半弧寻
ban***un@163.com
程 征
228***950@qq.com
参考实例:
程 征
228***950@qq.com
HIT_CCC
117***2963@qq.com
参考方法:
HIT_CCC
117***2963@qq.com
socbis
975***651@qq.com
参考方法:
socbis
975***651@qq.com
ronnyz
221***8677@qq.com
参考方法:
ronnyz
221***8677@qq.com
kisushotto
kis***otto@163.com
利用递归:
kisushotto
kis***otto@163.com
木子李
Li1***052573@163.com
给的例子有点问题,如果我输入超过5位数,虽然会倒序输出,但是最后一个数字可能会有好几位,比如之下的这种情况:
0 也是整数,根据那个判断,0 不满足任何一个条件,特殊情况没有特殊处理。
以下方法可供参考:
木子李
Li1***052573@163.com
阿立
139***6940@qq.com
使用递归思想,输入数字的同时记录按了几次键,就代表有几位数字。
阿立
139***6940@qq.com
LKXXX
lkx***qq.com
思路: 利用字符串的简便性让 for 和 strlen 配合将 a 字符串(输入的字符串)逆序复制给 b 字符串。
以上实例输出结果为:
LKXXX
lkx***qq.com
hello world
182***8342@qq.com
改变 X 可以增大数字范围到 10^X,还可以标识位数。
以上的输出结果:
hello world
182***8342@qq.com