不多于5位的正整数的处理
描述
一个不多于5位的正整数a,要求:1.求出它是几位数;2.分别打出每一位数字;3.按逆序打出各位数字,例如原数为321,应输出123。
输入
一行,不多于5位的正整数
输出
三行
第一行,一个整数,表示整数a的位数
第二行,正序输出整数a的每一位,每位间一个空格
第三行,逆序输出整数a,如果a是321,则输出123,如果a是100,则输出1
代码
#include <iostream>
#include <cmath>
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 - -;最后把得到的各个数加起来就得到了逆序输出的整数。
本文介绍了一种处理不多于五位正整数的方法,包括确定位数、正序输出各数字及逆序输出。使用C++编程实现,通过循环与数学函数完成任务,适合初学者学习。
7005

被折叠的 条评论
为什么被折叠?



