<OJ_Sicily>数字反转

Description

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

Input

输入共 1 行,一个整数N。

-1,000,000,000 ≤ N≤ 1,000,000,000。

Output

输出共 1 行,一个整数,表示反转后的新数。


解题思路:对于数字输入,采用字符数组输入的方式进行输入,将输入存入到一个字符数组里面,当第一个字符为“-”说明这是一个负数,否则为整数。先对字符数组进行遍历到数字的个位,然后从后往前寻找第一个不为0 的数(也就是排除开头为0的情况),然后从该数开始逐个输出,最后判断第一位是否为符号位,如果是符号位则不需要输出(因为符号位是第一个输出的),如果是数字则直接输出。

#include <iostream>
#include <stack>
using namespace std;
int main(int argc, const char * argv[]) {
    // insert code here...
    char inStr[12];
    int i = 0;
    bool isNegative = false;   // 标识是否为负数
    cin >> inStr;
    if (inStr[0] == '-') {     // 若为负数,isNegative = true;
        isNegative = true;
    }
    while (inStr[i] != '\0') {  // 先遍历到数字结尾
        i++;
    }
    
    while (inStr[i-1] == '0') {  // 从结尾开始返回到第一个不为0的数
        i--;
    }
    if (isNegative) {           // 若为负数,先输出负号
        cout << "-" ;
    }
    for (int j = i-1; j > 0; j--) {  // 逐个输出数字
        cout << inStr[j];
    }
    if (!isNegative) {          // 若为负数说明第一个为符号位,不用输出
        cout << inStr[0] << endl;
    }
    else cout << endl;          // 若不为负数,说明第一个为数字位,需要输出
    return 0;
}


阅读更多
文章标签: sicily 算法
个人分类: C++ OJ算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

<OJ_Sicily>数字反转

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭