繁体   English   中英

c++ - 如何以相反的顺序打印出整数的单个数字

[英]How to print out individual digits of an integer in reverse order c++

我有一个任务指示:

编写一个名为 PrintDigits 的函数,它接受一个整数并以相反的顺序打印出该整数的各个数字(首先是 1s 位,然后是 10s 位,然后是 100s 位等等),每行一个,并返回位数印刷。 这应该适用于正整数或负整数然后编写一个主函数,要求用户输入 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';
}

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

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

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

只要line是 string 或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)

请注意,这仍然是相反的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM