4.4 课后习题与实验(2)
习题 4-3
P1307 [NOIP2011 普及组] 数字反转
noip2011普及组第一题
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入格式
一个整数 NN
输出格式
一个整数,表示反转后的新数。
输入输出样例
输入 | 输出 |
---|---|
123 |
321 |
-380 |
-83 |
说明/提示
数据范围
−1,000,000,000 ≤ N ≤ 1,000,000,000
。
解答
规规矩矩的判断:
#include<iostream>
using namespace std;
int main()
{
int a,s=0;
cin>>a;
int a1000000000 = a/1000000000;
int a100000000 = a%1000000000/100000000;
int a10000000 = a%100000000/10000000;
int a1000000 = a%10000000/1000000;
int a100000 = a%1000000/100000;
int a10000 = a%100000/10000;
int a1000 = a%10000/1000;
int a100 = a%1000/100;
int a10 = a%100/10;
int a1 = a%10;
if(a>=1000000000 || a<=-1000000000)
{
s+=a1*1000000000;
s+=a10*100000000;
s+=a100*10000000;
s+=a1000*1000000;
s+=a10000*100000;
s+=a100000*10000;
s+=a1000000*1000;
s+=a10000000*100;
s+=a100000000*10;
s+=a1000000000;
}
else if(a>=100000000 || a<=-100000000)
{
s+=a1*100000000;
s+=a10*10000000;
s+=a100*1000000;
s+=a1000*100000;
s+=a10000*10000;
s+=a100000*1000;
s+=a1000000*100;
s+=a10000000*10;
s+=a100000000;
}
else if(a>=10000000 || a<=-10000000)
{
s+=a1*10000000;
s+=a10*1000000;
s+=a100*100000;
s+=a1000*10000;
s+=a10000*1000;
s+=a100000*100;
s+=a1000000*10;
s+=a10000000;
}
else if(a>=1000000 || a<=-1000000)
{
s+=a1*1000000;
s+=a10*100000;
s+=a100*10000;
s+=a1000*1000;
s+=a10000*100;
s+=a100000*10;
s+=a1000000;
}
else if(a>=100000 || a<=-100000)
{
s+=a1*100000;
s+=a10*10000;
s+=a100*1000;
s+=a1000*100;
s+=a10000*10;
s+=a100000;
}
else if(a>=10000 || a<=-10000)
{
s+=a1*10000;
s+=a10*1000;
s+=a100*100;
s+=a1000*10;
s+=a10000;
}
else if(a>=1000 || a<=-1000)
{
s+=a1*1000;
s+=a10*100;
s+=a100*10;
s+=a1000;
}
else if(a>=100 || a<=-100)
{
s+=a1*100;
s+=a10*10;
s+=a100;
}
else if(a>=10 || a<=-10)
{
s+=a1*10;
s+=a10;
}
else
{
s+=a1;
}
cout<<s;
return 0;
}
解法二:
#include<iostream>
using namespace std;
int main()
{
int a,flag=0,s=0;
cin>>a;
if(a<0) //如果是负数,先输出负号,并转换成正数
{
cout<<'-';
a=0-a;
}
while(a>0)
{
s=a%10; //取个位
if(s>0&&flag==0) //判断是否需要输出,首位非0数字后的数字才需要输出
flag=1;
if(flag==1)
cout<<s;
a/=10; //升位,十位升为个位,准备下一轮循环
}
return 0;
}
解法三:
#include<iostream>
using namespace std;
int main()
{
int a,flag=0,s=0;
cin>>a;
if(a<0)
{
cout<<'-';
a=0-a;
}
while(a%10==0) //除掉数字后边的0
{
a/=10;
}
while(a>0) //反向输出
{
cout<<a%10;
a/=10;
}
return 0;
}
博主的个人网站:https://codespark.cn/