如何以相反顺序C 打印整数的单个数字



我有一个指示:

的作业

编写一个称为printDigits的函数,该函数以相反顺序(首先是1s数字,然后是10s数字,然后是100s Digit等(,将单个整数取出该整数的单个数字,每行,并返回打印的数字数量。这应该适用于正整数或负面的整数 然后编写一个主函数,向用户询问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 << "nnDigits 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';
}

是否有另一种方法可以在没有数组的情况下获得这些结果?

最简单的方法是使用 string。然后,您只需阅读恰好是所有数字的字符串,然后以相反的顺序输出:

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

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

您可以使用数组,但不必。这个问题是递归的经典介绍性练习。

不必说您可以选择使用循环而不是递归,但我认为递归是优雅的

#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

#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)

请注意,它仍然反向。

相关内容

  • 没有找到相关文章

最新更新