Day10数字颠倒
描述
输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
数据范围: 0≤�≤230−1 0≤n≤230−1
输入描述:
输入一个int整数
输出描述:
将这个整数以字符串的形式逆序输出
示例1
输入:
1516000
复制
输出:
0006151
复制
示例2
输入:
0
输出:
0
具体思路
- 提取整数的每位个数出来,利用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;
}
复杂度
时间复杂度:O(n)+空间复杂度O(1)
小结
这道题不需要转换为string类型,反而会消耗空间复杂度,如果还有其他操作,可能需要转换为string类型