【问题描述】
把一个固定的5位数倒序。
【输入形式】
从键盘输入一个5位数。
【输出形式】
倒序后的5位数。
【样例输入】
12345
【样例输出】
54321
解题思路:
题目已经说明是固定的5位数了,就把每位分解输出就可以。
解题代码:
#include <iostream>
using namespace std;
main()
{
int num_input,num_output,a,b,c,d,e;
cin>>num_input;
a=num_input/10000; //num除10000取整,分离“万”位
b=num_input/1000%10; //num先除1000取整,再除10取余,分离“千”位
c=num_input/100%10; //num先除100取整,再除10取余,分离“百”位
d=num_input/10%10; //num先除10取整,再除10取余,分离“十”位
e=num_input%10; //num除10取余,分离“个”位
num_output=a+b*10+c*100+d*1000+e*10000; //倒序
cout<<num_output;
}
或者另外一种代码也可以,但稍微多打了几个字符:
#include <iostream>
using namespace std;
main()
{
int num_input,num_output,a,b,c,d,e;
cin>>num_input;
a=num_input/10000;
b=(num_input-a*10000)/1000;
c=(num_input-a*10000-b*1000)/100;
d=(num_input-a*10000-b*1000-c*100)/10;
e=num_input%10;
num_output=a+b*10+c*100+d*1000+e*10000;
cout<<num_output;
}
【问题描述】
把一个不多于5位的正整数,并输出倒序。
【输入形式】
从键盘输入一个不多于5位的正整数。
【输出形式】
倒序后的数字。
【样例输入】
12345
1234
【样例输出】
54321
4321
解题思路:
题目要求是不超过5位的数,需要判断输入的数有几位。
如果还像上一道题一样的代码,则输入1234会输出43210(就错误了)。
解题代码:
#include <iostream>
using namespace std;
int main()
{
int num_input,num_output,a,b,c,d,e;
cin>>num_input;
a=num_input/10000;
b=num_input/1000%10;
c=num_input/100%10;
d=num_input/10%10;
e=num_input%10;
if(a) num_output=a+b*10+c*100+d*1000+e*10000;//如果“万”位不为0,即存在
if(a==0&&b!=0) num_output=b+c*10+d*100+e*1000;//如果“万”位为0,“千”位不为0,即只有四位数
if(a==0&&b==0&&c!=0) num_output=c+d*10+e*100;//三位数
if(a==0&&b==0&&c==0&&d!=0) num_output=d+e*10;//两位数
if(a==0&&b==0&&c==0&&d==0) num_output=e;//一位数
cout<<num_output<<endl;
}
PS:可以看出上面两种方法都存在一个严重的问题,就是代码太长太长!这还是只对5位数进行倒序,如果是8位数,10位数呢……简直太麻烦,一点都不简洁
【问题描述】
把任意一个非负数倒序。
【输入形式】
从键盘输入任意一个非负数。
【输出形式】
倒序后的这个数。
【样例输入】
123456789
1234567
123
【样例输出】
987654321
7654321
321
解题思路:
当给的数范围很大的时候,就不能再用“数的分解”这种老思路解题了,而要想办法把输入数字的末位分离出来,加到一个新的变量(初始化为0)中,并且上几个分离出来的末位需要同时扩大10倍,一次一次的循环进行末位分离相加扩大倍数,直到输入数字被末位分离到不能再分离。(语言功底有限,解释的不是太清楚,见下面的代码展示)
解题代码:
//什么num_input , num_output的太烦了,直接用a代表输入的,b代表输出的了
#include <iostream>
using namespace std;
int main()
{
int a,b=0;
cin>>a;
while(a>0)//简直太简便了,都无法用言语来解释,参考下面图片
{
b=10*b+a%10;
a/=10;//即 a=a/10
}
cout<<b<<endl;
}
每步运行展示:
【问题描述】
编写函数,参数为一个整数,返回这个整数的反序数,
例如参数是1576,返回一个整数6751,如果输入是1230,则返回321。
在main函数中调用此函数,并将结果输出。
int reverse(int num);
【输入形式】
一个整数。
【输出形式】
倒序后的这个数。
【样例输入】
0
123
100
-23
-0
-100
【样例输出】
0
321
1
-32
0
-1
【提示】
因为有多组测试数据,读取输入的时候建议采用如下形式:
int num = 0;
while(cin>>num)
{
//你的代码
}
输入最后按下CTRL+Z,可以结束输入。
解题思路:
方法三介绍了一种极为简便的倒叙方法,那么就把它做成一个调用函数,再加几个if判断正负数就可以完成了
解题代码:
#include <iostream>
using namespace std;
int reverse(int num);//倒序函数声明
int main()
{
int num;
while(cin>>num)
{
int b;//定义倒序完的数为 b
if(num>=0)//如果输入的数是非负数
{
b=reverse(num);//则正常倒序
cout<<b<<endl;//正常输出
}
else //如果输入的数是负数
{
num*=-1;//先把 num乘以(-1),使num便为正数
b=reverse(num);//把正数倒序
cout<<-b<<endl;//把倒序完的数添上一个负号再输出
}
}
}
int reverse(int num)//把方法三的倒序数拿下来做成一个函数调用
{
int b=0;
while(num>0)
{
b=10*b+num%10;
num/=10;
}
return b;
}
如果之后有新的方法会继续更新