【洛谷 P1307】[NOIP2011 普及组] 数字反转 题解(取余)

129 阅读1分钟

[NOIP2011 普及组] 数字反转

题目描述

给定一个整数 N N N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。

输入格式

一个整数 N N N。

输出格式

一个整数,表示反转后的新数。

样例 #1

样例输入 #1

123

样例输出 #1

321

样例 #2

样例输入 #2

-380

样例输出 #2

-83

提示

【数据范围】

$-1,000,000,000\leq N\leq 1,000,000,000 $。

noip2011 普及组第一题

思路

负数输出符号,通过取余求每一位来倒序输出,这样做比字符串法更简洁。

AC代码

#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;

int main() {
    int n;
    int r;
    cin >> n;
    if(n < 0){
        putchar('-');
        n *= -1;
    }
    r = n % 10;
    for (int i = n, m = 10; i > 9; i /= 10)
    {
        r = r * 10 + (n % (10 * m) - n % m) / m;
        m *= 10;
    }
    cout << r << endl;
    return 0;
}