Day10数字颠倒

171 阅读2分钟

Day10数字颠倒

题源

描述

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

程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

数据范围: 0≤�≤230−1 0≤n≤230−1

输入描述:

输入一个int整数

输出描述:

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

示例1

输入:

1516000

复制

输出:

0006151

复制

示例2

输入:

0

输出:

0

具体思路

  1. 提取整数的每位个数出来,利用num % 10, 并且判断num / 10是否大于0,作为循环结束

具体实现

#include <math.h>
#include <algorithm>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <stdlib.h>
#include <cstdlib>
#include <cstring>

//#include "./include/list/sqlist.h"

using namespace std;


//Day10
//输入一个整数,将这个整数以字符串的形式逆序输出
//程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
//考虑到题目需求的数据范围,我们只需要返回int类型即可
/**
 * @description: O(n)+O(1)
 * @param {int} num
 * @return {*}
 */
void ReverseNum(int num){
    //string ans;//先设置字符串
    int i = 0;
    //首先将整数按照个十百千万进行单独拆分
    if(num < 9 && num >= 0){
        printf("%d\n",num);
        return;
        //ans[i] = ((num % 10) + 48);
        //return ans;
    }
    //将整数后n-1位置提取出来,利用num % 10的思路,然后将num转换为字符,所以根据ascii码需要+'0'操作
    for(;num / 10 != 0;num = num / 10){
        int temp = num % 10;
        char temp_c = temp + '0';
        printf("%c",temp_c);
        //printf("%d->temp\n",temp);
        //printf("%d->num\n",num);
        //ans[i] = (temp + '0');
        //printf("%c->ans\n",ans[i]);
    }
    printf("%c",num % 10 + '0');
    printf("\n");
    //ans[i] = ((num % 10) + '0');//最后的位数转换
    //printf("%c->ans\n",ans[i]);
    // for(int j = 0; i < ans.length(); j++){
    //     printf("%c",ans[j]);
    // }
    //std::cout << ans << std::endl;
    return;
    //return ans;
}


int main(){


    // //day06
    // LinkList L;
    // int n;//输入数据数量
    // int index = 0;//输入的位置
    // ListNode* p;
    // while(scanf("%d",&n) != EOF){
    //     L = ListTailInsert(L,n);
    //     scanf("%d",&index);
    //     if(index == 0) std::cout << 0 << std::endl;
    //     else{
    //         p = FindKInListIII(L,index);
    //         if(p != NULL) printf("%d\n",p->data);
    //     }
    //     //PrintLinkedList(L);
    // }
    // int month_;
    // while(scanf("%d",&month_) != EOF){
    //     int ans = GetRabbitNums(month_);
    //     printf("%d\n",ans);
    // }
    //day8
    //string s;
    int n;
    while(scanf("%d",&n) != EOF){
        ReverseNum(n);
        //int len_ans = ans.length();
        //std::cout << ans << std::endl;
        //printf("\n");
    }
    //SplitStringIII(s);
    system("pause");
    return 0;
}

image.png

复杂度

时间复杂度:O(n)+空间复杂度O(1)

小结

这道题不需要转换为string类型,反而会消耗空间复杂度,如果还有其他操作,可能需要转换为string类型