c++ - 用于反转 C++ 中以零结尾的数字

标签 c++

我想编写一个程序来反转数字。为了将 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/

相关文章:

c++ - 动态加载库和共享全局符号

c++ - 是否允许对封闭范围的 "capture"变量使用 requires 表达式?

c++ - 如何在 C++ 或 Winapi 中转移同步对象的所有权?

c++ - 尝试创建 100MB 的缓冲区时出现段错误

c++ - 元组和可变参数模板,这是如何工作的?

c++ - 这个功能有什么问题?我哪里弄错了?

c++ - 转换 GLib/GTK 指针是未定义的行为吗?

c++ - 在 C++ 中将字符串转换为 float

c++ - 链接器命令失败,退出代码为 1 - Xcode

c++ - 如何将 C++ 类转发声明为从另一个类继承?