不多于5位的正整数的处理

不多于5位的正整数的处理

描述

一个不多于5位的正整数a,要求:1.求出它是几位数;2.分别打出每一位数字;3.按逆序打出各位数字,例如原数为321,应输出123。

输入

一行,不多于5位的正整数

输出

三行
第一行,一个整数,表示整数a的位数
第二行,正序输出整数a的每一位,每位间一个空格
第三行,逆序输出整数a,如果a是321,则输出123,如果a是100,则输出1

代码

#include 
#include 
using namespace std;
int main()
{
	int a,k,sum,m,x,y,n;
	cin >> a;
	k = 0; sum = 0; m = a;
	for(int i = 1;a != 0; i++)
	{
		a = a / 10;
		k++;
	}
	cout << k << endl;
	int t = m;
	for(int b = k - 1; b >= 0; b--)
	{
		n = t / (pow(10, b));
		cout << n << " ";
		t %= int(pow(10, b)); 
	}
	cout << endl;
	for(int i = k - 1; i >= 0; i--)
	{
		y = m % 10;
		x = y * pow(10,i);
		m = m / 10;
		sum = sum + x;
	}
	cout << sum << endl;
	return 0;
}

思路

题目要求输出三行,这样我们可以用三个循环分别完成三行的输出,由于前两个循环都会改变输入数a的值,所以我们需要定义另一个变量m来储存a的值,第一行,我们需要定义一个计数器,循环的条件是a != 0;每做一次循环,都进行一遍a = a / 10,同时k++,这样循环结束输出k就是a的位数;第二行,要求正序输出数的每一位,这里我们用到了pow(),这在cmath当中,也用到了第一步当中的k,我们可以通过 n = t / (pow(10, b))操作得到第一位,接着通过t %= int(pow(10, b))来把输入数据的第一位去掉,要注意pow返回的是double值所以我们要强制类型转换,这样通过循环就完成了正序输出数的每一位;第三行,对输入的数作取余操作,然后乘以10的 i 次方,int i = k - 1; i >= 0; i - -;最后把得到的各个数加起来就得到了逆序输出的整数。

你可能感兴趣的:(不多于5位的正整数的处理)