我想编写一个程序来反转数字。为了将 2300 之类的数字反转为 32 以便不打印结尾的零,我找到了这个方法:
#include<iostream>
using namespace std;
int main()
{
int l;
cin>>l;
bool leading = true;
while (l>0)
{
if ((l%10==0)&& (leading==true))
{
l /= 10;
leading = false; // prints 032 as output
continue;
}
// leading = false; this prints correct 32
cout<<l%10;
l /= 10;
}
return 0;
}
在 if 语句中分配 boolean leading false 的指令没有给出有效答案,但我想将它分配为 false 应该给出 32 作为输出,无论我们在 if 语句外部还是内部提供它,因为它的目的只是让它成为 false一旦你得到最后一个数字是非零。 请说明输出差异的原因。
最佳答案
输出不同的原因是因为当你在 if
语句中设置 leading = false
时,你将它设置为 false
正确在遇到第一个零之后。当您遇到剩余的零时,leading
将为假,您将打印它。
当您在 if
语句之外设置 leading = false
时,您基本上是在等待直到遇到全零,然后再将其设置为 false
。
如果您要反转数字,这是众所周知的逻辑:
int reverse(int n)
{
int r; //remainder
int rev = 0; //reversed number
while(n != 0)
{
r = n%10;
rev = rev*10 + r;
n /= 10;
}
return rev;
}
编辑:
如果您只是想了解反转数字的逻辑,上面的代码片段很好。但是如果你想在任何地方实现逻辑,你必须确保你处理整数溢出问题(反转的数字可能太大而无法存储在整数中!!)。 以下代码将处理整数溢出:
int reverse(int n)
{
int r; //remainder
int rev = 0; //reversed number
while(n != 0)
{
r = n%10;
if(INT_MAX/10 < rev)
{
cout << "Reversed number too big for an int.";
break;
}
else if(INT_MAX-r < rev*10)
{
cout << "Reversed number too big for an int.";
break;
}
rev = rev*10 + r;
n /= 10;
}
if(n != 0)
{
//could not reverse number
//take appropriate action
}
return rev;
}
关于c++ - 用于反转 C++ 中以零结尾的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70696083/