题目描述
给定一个不多于5位的正整数,要求:① 求它是几位数;② 分别输出每一位数字;③ 按逆序输出各位数字。例如原数为321,应输出123。
输入
多于5位的正整数
输出
输出3行,分别是几位数、每一位数字,用空格分隔、逆序输出各数字,不用空格分隔
样例输入
12
样例输出
2
1 2
21
方法一
#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
int num; // 正整数
int place; // 位数
int a1, a2, a3, a4, a5; // 个,十,百,千,万位
scanf_s("%d", &num);
if (num > 99999 || num < 1) //判断输入数字范围
{
printf("Error! \n");
return 1;
}
if (num > 9999)
place = 5;
else if (num > 999)
place = 4;
else if (num > 99)
place = 3;
else if (num > 9)
place = 2;
else
place = 1;
printf("%d\n", place);
a5 = num / 10000;
a4 = (int)(num - a5 * 10000) / 1000;
a3 = (int)(num - a5 * 10000 - a4 * 1000) / 100;
a2 = (int)(num - a5 * 10000 - a4 * 1000 - a3 * 100) / 10;
a1 = (int)(num - a5 * 10000 - a4 * 1000 - a3 * 100 - a2 * 10);
switch (place)
{
case 5:
printf("%d %d %d %d %d\n", a5, a4, a3, a2, a1); ;
printf("%d%d%d%d%d\n", a1, a2, a3, a4, a5);
break;
case 4:
printf("%d %d %d %d\n", a4, a3, a2, a1);
printf("%d%d%d%d\n", a1, a2, a3, a4);
break;
case 3:
printf("%d %d %d\n", a3, a2, a1);
printf("%d%d%d\n", a1, a2, a3);
break;
case 2:
printf("%d %d\n", a2, a1);
printf("%d%d\n", a1, a2);
break;
case 1:
printf("%d\n", a1);
printf("%d\n", a1);
break;
default:
break;
}
return 0;
}
方法二
// 该方法对于任意位数的数都可以完成转换
#include<iostream>
using namespace std;
int main()
{
int num = 0, num2 = 0; // 原数倒序数
int place = 0, r = 0; // 位数和余数remainder
scanf_s("%d", &num);
while (num != 0)
{
r = num % 10;
num /= 10;
place += 1;
num2 = num2 * 10 + r;
}
printf("%d\n", place);
int n = num2;
while (n != 0)
{
r = n % 10;
n /= 10;
printf("%d ", r);
}
printf("\n");
printf("%d\n", num2);
return 0;
}