题目的主要信息:

  • 输入一个int型整数
  • 将其逆序由字符串的形式输出
  • 若数字含有0,则逆序形式也含有0

方法一:逆序拼接

具体做法:

我们可以用除法每次先对数字用10取模获取数字最后一位,添加到字符串中,然后除10去掉最后一位,继续下一次操作。这样拼接出来的字符串就是逆序的,直接输出即可。

alt

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

int main(){
    int n;
    cin >> n;
    string s;
    while(n){  
        s += (n % 10 + '0'); //从后往前取数字每一位
        n /= 10;
    }
    cout << s << endl;
    return 0;
}

复杂度分析:

  • 时间复杂度:O(log10n)O(log_{10}n)O(log10n),一个数字最多能除多少个10,是取10的对数
  • 空间复杂度:O(1)O(1)O(1),无额外空间,字符串s属于必要空间

方法二:字符串翻转

具体做法:

我们可以用to_string函数直接先将数字转变成字符串,然后利用reverse函数对字符串进行反转,最后输出就是逆序。

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

int main(){
    int n;
    cin >> n;
    string s = to_string(n); //int转化为stirng
    reverse(s.begin(), s.end()); //字符串翻转
    cout << s << endl;
    return 0;
}

复杂度分析:

  • 时间复杂度:O(log10n)O(log_{10}n)O(log10n),其中n为数字,其长度即位数就是log10nlog_{10}nlog10n,而reverse函数只与字符串长度有馆
  • 空间复杂度:O(1)O(1)O(1),无额外空间,s属于输出必要空间