我的作业指示:
编写一个名为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';
}
是否有另一种方法可以在没有数组的情况下获得这些结果?
答案 0 :(得分:1)
最简单的方法是使用string
。然后你可以读入恰好是所有数字的字符串,然后以相反的顺序输出它:
std::string reverse;
for(size_t i = (line.size() - 1); i >= 0; --i)
{
reverse += line[i];
}
只要line
是字符串或char*
,您就可以执行此操作,只需使用string
代替int
答案 1 :(得分:0)
您可以使用数组,但不必使用。这个问题是递归的经典入门练习。
无需说你可以选择使用一个循环而不是回归,但我认为回归是优雅的
#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
答案 2 :(得分:0)
#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)
。
请记住,一切仍然相反。