您的位置:首页 > 其它

数字颠倒——来自华为OJ平台测试基础篇

2014-10-02 16:51 489 查看

/*

* 数字颠倒

* 描述: 描述:

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

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

* 知识点: 字符串

* 题目来源: 内部整理

* 练习阶段: 初级

* 运行时间限制: 10Sec

* 内存限制: 128MByte

* 输入:

* 输入一个int整数

* 输出:

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

* 样例输入: 1516000

* 样例输出: 0006151

* 完成日期:214/10/02

*/

#include <iostream>

#include <string>

#include <string.h>

using namespace std;

bool Input(std::string &str,int &num);

bool Isvalid(std::string str,int &num);

void Transposition(int num,std::string &Tstr);

int main()

{

std::string string;

std::string Transtr;

int num = 0;

bool result = Input(string,num);

if(!result)

{

return -1;

}

Transposition(num,Transtr);

std::cout << Transtr <<endl;

system("pause");

return 0;

}

bool Input(std::string &str,int &num)

{

getline(std::cin,str,'\n');

bool result = Isvalid(str,num);

if(!result)

{

return false;

}

return true;

}

/*

* 判断输入的字符串是否为有效整型数,并将字符串转换成整型数

*/

bool Isvalid(std::string str,int &num)

{

const char* cstring;

int len = str.size();

char c;

int begin = 0;

int end = len;

/* 剔除有效字符前面的空格和制表符 */

for(int j=0;j<len;j++)

{

c = str.at(j);

if((c==32) || (c==9))

{

begin++;

continue;

}

break;

}

/* 剔除有效字符后面的空格和制表符 */

for(int k=len-1;k>0;k--)

{

c = str.at(k);

if((c==32) || (c==9))

{

end--;

continue;

}

break;

}

/* 判断有效字符中是否有非法输入 */

for(int i=begin;i<end;i++)

{

c = str.at(i);

if(!((c>=48 && c<=57) || (c==43) || (c==45))) /* 有效字符可以是正负0到9 */

{

return false;

}

}

std::string substr = str.substr(begin,(end-begin));

cstring = substr.c_str();

num = atoi(cstring);

if(num<0)

{

return false;

}

return true;

}

void Transposition(int num,std::string &Tstr)

{

char c;

while((num/10!=0))

{

c = 48 + (num%10); /* 将数字0到9转换成字符0到9 */

Tstr.push_back(c);

num = num/10;

}

c = 48 + num;

Tstr.push_back(c); /* 最高位 */

return;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: