[华为机试练习题]47.整型反序

时间:2023-02-12 21:19:05

题目

描述:     
简要描述:给出一个不多于5位的整数, 进行反序处理
要求:
1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123(仅数字间以空格间隔, 负号与数字之间不需要间隔)

例如:

输入:
12345
输出:
5
1 2 3 4 5
54321

注意:如果是负数,负号加在第一个数字之前, 与数字没有空格间隔

比如
输入:
-12345
输出:
5
-1 2 3 4 5
-54321

函数原型:

/*
输入:
iInput: 位数不大于5的整数
输出:
iNum: 整数位数
strRst: 空格间隔输出结果
iOutput:逆序整数
返回:
0 成功
-1 输入无效
*/
int ProcessX(int iInput, int& iNum, char * strRst, int& iOutput)

练习阶段:

初级 

代码

/*---------------------------------------
* 日期:2015-07-03
* 作者:SJF0115
* 题目:整型反序
* 来源:华为机试练习题
-----------------------------------------*/

#include <iostream>
#include "oj.h"
#include <vector>
#include <string>
using namespace std;

// 求取整数的各位 以及 逆序整数
vector<int> AllNum(int num,int &reverseNum){
vector<int> result;
if(num == 0){
result.push_back(0);
return result;
}//if
reverseNum = 0;
int tmp = num;
int c;
while(tmp){
c = tmp % 10;
result.push_back(c);
reverseNum = reverseNum * 10 + c;
tmp /= 10;
}//while
return result;
}

/*
功能:
给出一个不多于5位的整数,
要求:
1、求出它是几位数
2、分别输出每一位数字
3、按逆序输出各位数字,例如原数为321,应输出123
输入:
整型 iInput,位数不大于5的整数

输出:
整数位数 iNum
空格间隔输出结果 strRst
逆序整数 iOutput

返回:
0 成功
-1 输入无效
*/


int ProcessX(int iInput, int& iNum, char * strRst, int& iOutput){
if(strRst == NULL){
return -1;
}//if
// 负数
bool positive = true;
if(iInput < 0){
positive = false;
iInput = -iInput;
}//if
// 整数上的各位
vector<int> vec = AllNum(iInput,iOutput);

// 求出它是几位数
iNum = vec.size();

// 负数情况
int index = 0;
if(!positive){
iOutput = -iOutput;
strRst[index++] = '-';
}//if

// 按格式分别输出每一位数字
for(int i = iNum-1;i >= 0;--i){
if(i == iNum-1){
strRst[index++] = vec[i] + '0';
}//if
else{
strRst[index++] = ' ';
strRst[index++] = vec[i] + '0';
}//else
}//for
strRst[index] = '\0';
return 0;
}