题目描述
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入输出格式
输入格式:
输入文件名为reverse.in 。
输入共1 行,一个整数 N。
输出格式:
输出文件名为reverse.out 。
输出共1行,一个整数,表示反转后的新数。
输入输出样例
输入样例#1:
123
输出样例#1:
321
输入样例#2:
-380
输出样例#2:
-83
说明
数据范围
-1,000,000,000≤ N≤ 1,000,000,000 。
noip2011普及组第一题
WriteUp:
参考AC代码:
用队列进行输出:
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <queue>
using namespace std;
int main(void){
int a;
int flag = 0;
queue<int> que;
scanf("%d",&a);
if (a>0)
{
flag = 0;
}else if (a==0)
{
printf("0");
return 0;
}else{
flag = 1;
a = -a;
}
while (a!=0)
{
if (a%10==0 && que.size()==0)
{
a /= 10;
continue;
}
que.push(a%10);
a /= 10;
}
if (!flag)
{
while (!que.empty())
{
printf("%d",que.front());
que.pop();
}
}else{
printf("-");
while (!que.empty())
{
printf("%d",que.front());
que.pop();
}
}
return 0;
}
使用数字反转公式(简单):
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int main(void)
{
int num;
int ans = 0;
scanf("%d",&num);
//reverse process begin
while(num){
ans *= 10;
ans += num%10;
num /= 10;
}
//end
printf("%d",ans);
return 0;
}