[英]recursive function digits of a positive decimal integer in reverse order 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.