代码之家  ›  专栏  ›  技术社区  ›  bjskishore123

带前导零的数的倒数

c++
  •  3
  • bjskishore123  · 技术社区  · 14 年前

    如何反转数字中前导零的数字? 例如:如果输入为004, 输出应为400。

    我写了下面的程序,但它只在输入中没有前导零的情况下工作。

    int num;
    cout<<"Enter number "<<endl;
    cin>>num;
    
    int rev = 0;
    int reminder;
    while(num != 0)
    {
        reminder = num % 10;
        rev = rev * 10 + reminder;
        num = num / 10;
    }
    cout<<"Reverse = "<<rev<<endl;
    

    有没有办法输入带前导零的数字?即便如此,上述逻辑也不适用于此类数字。

    有什么简单的解决办法吗?它可以通过将输入作为字符串并对其进行处理来实现。但看起来不太好。

    * 编辑:如果数字的长度是已知的,看起来可以用前导零反转数字。 (不使用字符串)*

    一旦密码生效,我就把它寄出去。

    编辑2:我尝试将字符放回CIN流,然后读取并计算相反的值。它适用于2位数字。

    但如果长度已知,则更容易找到相反的长度。我要做的就是,乘以10得到所需的次数。 所以我想,我会使用字符串方法。 希望面试官会高兴的:)

    10 回复  |  直到 12 年前
        1
  •  6
  •   Jonathan Grynspan    14 年前

    前导零不由二进制数表示。( int , double 等等),所以你可能要用 std::string . 将输入读取到字符串中,然后调用 std::reverse() 将字符串作为输入传递。

        2
  •  6
  •   AndreKR    14 年前

    是的,必须使用字符串。不能将前导零存储在 int .

        3
  •  2
  •   Nick    14 年前

    如果您知道您希望数字在手边的总宽度,您可以重用您拥有的代码,并将结果(从右到左)存储在一个初始化为零的数组中。注意:您可能需要对下面列出的代码添加一些错误检查。

    int num, width;
    
    cout<<"Enter number "<<endl;
    cin>>num;
    
    cout<<"Enter width: "<<endl;
    cin>>width;
    
    int rev[width];
    for (int i = 0; i < width; ++i)
        rev[i] = 0;
    
    int cnt = width - 1;
    int rev = 0;
    int reminder;
    while(num != 0)
    {
        reminder = num % 10;
    //    rev = rev * 10 + reminder;
        rev[cnt] = remainder;
        --cnt;
        num = num / 10;
    }
    
    cout << "Reverse: ";
    for (int i = 0; i < width; ++i)
        cout << rev[i];
    cout << endl;
    

    这将允许您在将来更容易地操作数字。

        4
  •  1
  •   eq-    14 年前

    以字符串格式读取数字(即,使用std::string)并反转字符串。

        5
  •  1
  •   littlegreen    14 年前

    一旦您将输入转换为整数(在第3行中进行了此操作),那么有关用户输入中前导零的任何信息都将丢失。

    你得用一根绳子。

        6
  •  1
  •   Tony Delroy    14 年前

    一种递归的方法,但很容易转换成循环…

    #include <iostream>
    
    int f(int value = 1)
    {
        char c;
        return (std::cin.get(c) && isdigit(c))
               ? (c - '0') * value + f(10 * value)
               : 0;
    }
    
    
    int main()
    {
        std::cout << f() << '\n';
    }
    
        7
  •  0
  •   Kos    14 年前

    正如Chrisf所说,您需要加载一个字符串,因为4和004是相同的int,并且在将其分配给 int 变量。

    接下来要做的是修剪字符串,使其仅包含数字(如果希望正确),然后运行 std::reverse 就这样-你就完了。

        8
  •  0
  •   jhourback    14 年前

    将数字保留为字符串,然后使用 std::reverse .

    std::string num;
    std::cout << "Enter number " << std::endl;
    std::cin >> num;
    
    std::string rev(num);
    std::reverse(rev.begin(), rev.end());
    
    std::cout << "Reverse = " << rev << std::endl;
    
        9
  •  0
  •   Dijkstra    14 年前

    取代你 while 循环带 for 循环的运行次数与您希望的相同,原始数字包含数字(包括前导零)。例如,004要求循环运行3次,而不是过早终止一次。 x == 0 .

        10
  •  0
  •   Rostyslav Dzinko Ankit    13 年前
    s = int(raw_input(" enter the no of tyms :"))
    n = 0
    list, list1 = [], []
    
    while n <= s:
        m = raw_input("enter the number:")
            n=n+1
            list.append(m)
    
    print list
    list.reverse()
    print list
    

    在最好的lang python中反转。