我有一个指示:
的作业编写一个称为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)
。
请注意,它仍然反向。