C语言程序设计教程(第三版)课后习题5.7
语言学习从菜鸟开始
描述
给出一个不多于5位的整数,要求1、求出它是几位数2、分别输出每一位数字3、按逆序输出各位数字,例如原数为321,应输出123
输入
一个不大于5位的数字
输出
三行第一行 位数第二行 用空格分开的每个数字,注意最后一个数字后没有空格第三行 按逆序输出这个数
输入样例 1
12345
输出样例 1
5
1 2 3 4 5
54321
解题思路:
1.注意:
a.不超过五位数,
b.注意输出顺序
c.第二行用空格分开的每个数字,注意最后一个数字后没有空格
d. 注意n=0时的情况
2.详细解析在代码中。
#不使用数组做就有点繁琐
//做法一(不用数组)
#include<stdio.h>
#include<math.h>
int main()
{
int n,temp,count = 0;
//n是我们输入的数值,temp起到临时变量作用,count计数器:统计n的位数
scanf("%d",&n);
temp = n;
if(temp == 0)//先判断n为0时输出格式
{
printf("%d\n%d\n%d",++count,n,n);
return 0;
}
while(temp != 0)//n不为0时,统计n的位数,功能循环
{
temp /= 10;
count++;
}
printf("%d\n",count);
for(int i = count-1;i>=0;i--)//分别打印n的各个位数
{
temp =n/pow(10,i);//运用了数学函数,注意最后一个输出数字
temp%=10;//取到每一个位数上的数值
if(i != 0){
printf("%d ",temp);
}else
printf("%d",temp);
}
printf("\n");
while(n != 0)//打印逆序结果
{
temp = n % 10;
printf("%d",temp);
n /= 10;
}
return 0;
}
#使用数组做就简单了
//做法二(使用数组)
#include <stdio.h>
int main()
{
int n,t;
int count=0;
int a[5];
scanf("%d",&n);
t=n;
while(t)//将每一个位数上的数储存在数组中,并记录n的位数
{
a[count]=t%10;
t/=10;
count++;
}
printf("%d\n",count);
for(count--;count>0;count--)
printf("%d ",a[count]);
printf("%d\n",a[count]);//注意:该语句不在循环中,输出a[0]位置的数值
t=n;
while(t)
{
printf("%d",t%10);
t/=10;
}
return 0;
}
感谢每一位看到这里的大佬,如有错误请指出!