C++ 整数的逆序转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 整数的逆序转换相关的知识,希望对你有一定的参考价值。

输入一个整数,将其反序转换成另一个整数,如输入12345,转换成54321

参考技术A 简单又实用的
#include<iostream.h>
void main()
int a,b;
cin>>a;
while(a!=0)
b=a%10;
cout<<b;
a=a/10;

本回答被提问者采纳
参考技术B #include<iostream.h>

using namespace std;

void main()



char num[];

int i,len;

cout<<"请先输入这个整数的位数";

cin>>len>>end;

for(i=0;i<len;i++)

cin>>num[i];

cout<<"正序输出"<<num[i];

for(i=len-1;i>=0;i--)

cout<<"逆序输出"<<num[i];

参考技术C //num 输入的整数
//cnum 转换后的整数
//怎么输入输出就不说了

cnum=0;
while (num !=0)
cnum=cnum * 10 + num%10;
num = num/10;
参考技术D 不停除10求余,将结果保存在数组里面,最后在对数组处理 第5个回答  2009-11-05 #include<iostream>
using namespace std;
int fun(int n)

int data;
if(n/10==0)

cout<<n<<endl;
return 0;

data=n%10;
cout<<data;
n/=10;
fun(n);


int main()

int a;
cin>>a;
fun(a);
system("pause");
return 0;


递归实现。。。

在 C++ 中将字符转换为整数

【中文标题】在 C++ 中将字符转换为整数【英文标题】:Convert a character to an integer in C++ 【发布时间】:2012-03-06 22:42:59 【问题描述】:

如何将字符串中的每个字符设置为整数?这只是为了编写散列函数我必须做的第一件事。我必须将字符串中的每个字符设置为一个整数,以便我可以对它们的值求和。请帮忙!是这样的吗??

    int hashCode(string s)

   int Sum = 0;
   for(int i=0; i<strlen(s); i++)
   
      Sum += (int)s[i];
   
   return Sum;

【问题讨论】:

strlen(std::string)?说什么? 类似的,是的。您应该查找字符串类以了解如何正确获取长度。 在你开始编写自己的哈希函数之前,你有没有看过this? @moooeeeep:显然这是作业。 OP,您的老师可能会教您编写这样的代码,因为您是初学者,但请注意,大多数 C++ 团队不会将其视为生产质量代码。 复制Convert char to int in C and C++(二次解释) 【参考方案1】:

是的——在 C 和 C++ 中,char 只是一个小整数类型(通常范围从 -128 到 +127)。当你对其进行数学运算时,它通常会自动转换为int,所以你甚至不需要你的演员表。

顺便说一句,您真的不想在 for 循环的停止条件中使用 strlen(s)。至少对于大多数编译器来说,这将迫使它在每次迭代时重新评估 strlen(s),所以你的线性算法只是变成了二次的。

size_t len = strlen(s);

for (int i=0; i<len; i++)
    Sum += s[i];

或者,如果s 实际上是std::string,正如参数类型所暗示的那样:

for (int i=0; i<s.size(); i++)
    Sum += s[i];

还有一种可能性:

Sum = std::accumulate(s.begin(), s.end(), 0);

【讨论】:

+1 std::accumulate() -- “你真的不想在 for 循环的停止条件中使用 strlen(s)” IME 编译器足够聪明,可以判断它们是否可以解除它大部分时间都在循环之外。 @bames53:做一些更新的测试,我发现 gcc 做了循环提升,但 VC++ 没有。【参考方案2】:

字符通常在内部用整数表示,因此s[i] 可以分配给整数。

如果你有char '1',并且想存储int 1,那么你可以做s[i]-'0'

【讨论】:

【参考方案3】:

你可能正在寻找

Sum += s[i] - '0';

关于将数字转换为字符串的一般情况,反之亦然,请参阅this FAQ entry。

【讨论】:

【参考方案4】:

您要查找的函数是sscanf。

您可以在标题 stdio.h 中找到它,它是这样定义的

int sscanf ( const char * str, const char * format, ...);

在你的情况下,你会这样使用它:

string str = "SomeStringWithNumbers";
int s, len;
len = str.length();
for(int i = 0; i < len; i++ )

    int status = sscanf( str[i], "%d", &s);
    // Check status if necessary 
 

如果你的字符串只包含你想要的整数,你需要调整参数。然后,您可以修改第一个参数,使其直接指向您的号码所在的字符串部分,或者您必须调整格式字符串。然后你应该检查返回值。

【讨论】:

【参考方案5】:

您可以使用strtol,或者,因为它被标记为 C++,所以可以使用字符串流。

string myStream = "45";
istringstream buffer(myString);
int value;
buffer >> value; 

【讨论】:

不,不要使用atolstrtol,如果你真的需要,但出于散列目的,你可能根本不转换。 @CatPlusPlus:是的,你是对的。我忘了你基本上不能检查失败,因为它返回 0... Cat Plus Plus。但我们的练习是将它们转换为 ascii,然后对 ascii 求和,然后除以模数。这种类型的哈希函数有名称吗?【参考方案6】:

答案是(我认为)

int i = atoi("5")

顺便说一句,将 ascii 转换为整数。

可能不支持 Cat Plus Plus atoi。所以你最好不要使用它;)

【讨论】:

永远不要使用atoi。它已损坏,无法正确传达错误。 @EdS.: atoi任何方面可靠。

以上是关于C++ 整数的逆序转换的主要内容,如果未能解决你的问题,请参考以下文章

用递归函数和栈逆序一个栈(C++)

java 逆序输出整数

一道编程题:求逆序对的个数

逆序乘积式

用C语言将一个整数逆序输出(用自定义函数)

栈的应用——逆序输出和括号匹配