【问题标题】:How to print out individual digits of an integer in reverse order c++如何以相反的顺序打印出整数的各个数字c ++
【发布时间】:2018-09-13 06:40:34
【问题描述】:

我有一个任务指示:

编写一个名为 PrintDigits 的函数,它接收一个整数并以相反的顺序打印出该整数的各个数字(首先是 1 位,然后是 10 位,然后是 100 位,依此类推),每行一个,并返回打印的位数。这应该适用于正整数或负整数 然后编写一个主函数,要求用户输入 2 个整数,打印出这两个整数的位数(使用您编写的 PrintDigits 函数),并告诉用户哪个整数的位数最多以及位数的差异是多少。你可以假设用户输入是两个整数。

但我的问题是我是否应该使用数组。我知道使用数组,您可以挑选出单个数字并以相反的顺序打印它们,但我不确定这是否适用于分解单个整数。我尝试过使用数组,但我认为这不再是正确的路线。这是我的代码:

#include <iostream>
using namespace std;

void PrintDigits(int[], int);

int main()
{    
    int int1[8], int2[8];

    cout << "Please input two integers: ";
    cin >> int1[8] >> int2[8];

    cout << "\n\nDigits of " << int1[8];
    cout << PrintDigits(int1, 8);



    return 0;
}

void PrintDigits (int arr[], int size)
{
    for (int i=0; i < size; i++)
        cout << arr[i] << '/n';
}

有没有其他方法可以在没有数组的情况下获得这些结果?

【问题讨论】:

  • 除法和循环就是你所需要的......
  • 我不懂数组。你确定那是你想要使用的吗?

标签: c++ integer user-input reverse


【解决方案1】:

最简单的方法是使用string。然后你可以读入一个恰好是所有数字的字符串,然后以相反的顺序输出:

std::string reverse;
for(size_t i = (line.size() - 1); i >= 0; --i)
{
    reverse += line[i];
}

只要line 是字符串或char*,你就可以这样做,你只需要使用string 而不是int

【讨论】:

    【解决方案2】:

    您可以使用数组,但您不必这样做。这个问题是一个经典的递归入门练习。

    不用说你可以选择使用循环来代替递归,但我认为递归很优雅

    #include <iostream>
    using namespace std;
    
    void func(int val) {
        int new_val = val / 10;
        int dig = val % 10;
        cout << dig << " ";
        if (new_val > 0) {
            func(new_val);
        }
    }
    
    int main() {
        func(4321);
        return 0;
    }
    

    说明

    使用% 运算符提取最右边的数字。打印它。如果其他数字所代表的数字大于0,则重复该过程。

    这个输出:1 2 3 4

    【讨论】:

    • 为什么要给出答案?这个问题是经典的初学者问题。
    • 嗨@PaulMcKenzie,我不确定我是否理解,为什么不给出答案?
    • 从技术上讲,这不是 OP 作业问题的完整解决方案 :),该问题要求您将它们打印在单独的行上并考虑负数,我刚刚为它们提供了 1 个可能提取数字的方法:)
    • 因为它是为初学者设计的问题。在编程世界中,将整数反转作为一项任务作为一种通过仪式。
    • 好吧,我不会对此发表评论:),如果学生有良心,他们不会自己复制和做。但是阐明正确的概念没有害处:D?
    【解决方案3】:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void) {
        int const number = ::rand();
    
        for (int iterator = number; number; number /= 10)
        ::printf("[%i]", number % 10);
    
        return EXIT_SUCCESS;
    }
    

    这通常对我有用。如果您希望将数字转换为字符串,请将 number % 10 更改为 "0123456789"[number % 10]'0' + (number % 10)

    请注意,一切都是相反的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      相关资源
      最近更新 更多