HJ11 数字颠倒

141 阅读1分钟

Day10 2023/01/17

题目链接

难度:简单

题目

输入一个整数,将这个整数以字符串的形式逆序输出,程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001,数据范围:0 ≤ n ≤ 2^30−1

输入描述:

输入一个int整数

输出描述:

将这个整数以字符串的形式逆序输出

示例

输入:1516000
输出:0006151

思路一


输入数字nums % 10取得当前个位数并打印,然后nums / 10去掉当前个位数,循环直到输出所有数字。

思路二


使用c++的库函数来实现

关键点


  • reverse(start, end),反转字符串,start 代表字符起始位置,end 为结束位置

算法实现


c++代码实现-取值法

//方法一:取值法
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main () {
    int nums; //输入数值
    cin >> nums;
    while(nums) { // 非0为真
        cout << nums % 10; //去当前各位数
        nums /= 10; //去掉已打印的个位数
    }
    return 0;
}
  • 时间复杂度 O(n)O(n) --- 遍历字符串,n为字符串长度
  • 空间复杂度 O(1)O(1) --- 没有额外的辅助空间

c++代码实现2-库函数

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

//方法二:利用库函数
int main () {
    int nums; //输入数值
    cin >> nums;
    string str = to_string(nums); //转成字符串
    reverse(str.begin(), str.end()); //倒序字符串
    cout << str << endl; //输出
}
  • 时间复杂度 O(n)O(n) --- reverse方法的复杂度为O(n)
  • 空间复杂度 O(1)O(1) --- 无额外的辅助空间

总结

  • 本题比较简单,推荐掌握取值法。