因式分解数字时输出额外的“0”
Extra "0" in output when factorizing a number
编写一个函数 int fact(int n)
显示整数 n
的因数,以及 returns 因数的个数。使用用户输入
在 main()
中调用此函数
#include<iostream>
using namespace std;
int fact(int n);
int main() {
int n,factor;
cout << "Enter an integer : ";
cin >> n;
factor = fact(n);
cout << factor;
return 0;
}
int fact(int n)
{
for (int i = 1; i <= n; ++i)
{
if (n % i == 0)
cout << i << endl;
}
return 0;
}
如果我输入 7
,我会得到 1,7,0
。我如何删除这个 0
以及如何找到因子的数量?
Fact() 总是 returns 0 所以这一行打印 0
cout << factor;
对于可以更改 fact() 的 return 值的因素数:
int fact(int n)
{
int nb = 0;
for (int i = 1; i <= n; ++i)
{
if (n % i == 0) {
cout << i << endl;
nb++;
}
}
return nb;
}
关键部分是“和returns因子的个数”。你不那样做。统计因素:
int fact(int n)
{
int count = 0;
for (int i = 1; i <= n; ++i)
{
if (n % i == 0)
{
// found a factor, add to the count
count++;
cout << i << endl;
}
}
// return the count instead
return count;
}
然后,您的主函数可以使用该计数:
factor = fact(n); // fact(n) will already print the factors
// now just print the number
cout << "Number of factors: " << factor << '\n';
你应该算在你的 int fact()
函数中。将变量设置为 0 并在当前每次显示 i 时递增。然后在函数的末尾而不是 returning 0 return 计数变量。
int fact(int n)
{
int count=0;
for (int i = 1; i <= n; ++i)
{
if (n % i == 0) {
cout << i << endl;
count++;
}
}
return count;
}
#include <iostream>
#include <vector>
std::vector<int> fact(int n);
int main() {
int n;
std::cout << "Number: ";
std::cin >> n;
std::vector<int> factors = fact(n);
for (auto i : factors) {
std::cout << i << ' ';
}
std::cout << '\n';
std::cout << "Number of factors: " << factors.size() << '\n';
return 0;
}
std::vector<int> fact(int n) {
std::vector<int> vec{1};
for (int i = 2; i <= n / 2; ++i) {
if (n % i == 0) {
vec.push_back(i);
}
}
vec.push_back(n);
return vec;
}
如果你要 return 来自 fact()
的任何东西,它应该是这些因素。为此,我使用了 std::vector
。它是一个可以按需增长的数组。数字 1 和 n 始终是因数,因此我不会费心为它们做数学运算。向量已初始化并保持值 1,我只计算 n 的一半(任何大于 n/2 的数字都不会均分,所以我的循环通过识别实际的速度完成大约一半的速度范围)。然后我将 n 添加到向量中,我 return.
我的main打印vector,vector知道自己的大小,也就是因子的个数。
或者,您可以只在 fact()
函数中进行计数。
#include <iostream>
#include <vector>
// Prints factors of n and returns the number of factors
int fact(int n);
int main() {
int n;
std::cout << "Number: ";
std::cin >> n;
int numFactors = fact(n);
std::cout << "Number of factors: " << numFactors << '\n';
return 0;
}
int fact(int n) {
int factorCount = 2; // Already counting 1 and n
std::cout << "1 ";
for (int i = 2; i <= n / 2; ++i) {
if (n % i == 0) {
std::cout << i << ' ';
++factorCount;
}
}
std::cout << n << '\n';
return factorCount;
}
您的代码的主要问题是您的函数总是 return 为零。您需要计算因素并 return 它。
除此之外,您的代码性能很差,因为循环持续的时间比需要的长得多。您可以使用 n
的平方根作为 for
循环中的限制。喜欢:
int fact(int n)
{
if (n < 1) return 0;
int res = 0;
int limit = sqrt(n);
for (int i = 1; i <= limit; ++i)
{
if (n % i == 0)
{
res += 2;
cout << i << " - " << n/i << endl;
}
}
if (limit * limit == n)
{
--res;
}
return res;
}
对于 n = 36
输出是:
1 - 36
2 - 18
3 - 12
4 - 9
6 - 6
并且 returned 值为 9
下面是另一种方法。它不使用平方根。相反,它通过使用 i
的平方作为循环限制来保持较低的循环数。
int fact(int n)
{
if (n < 1) return 0;
int res = 0;
int i = 1;
int i_square = i * i;
while (i_square < n)
{
if (n % i == 0)
{
res += 2;
cout << i << " - " << n/i << endl;
}
++i;
i_square = i * i;
}
if (i_square == n)
{
++res;
cout << i << " - " << n/i << endl;
}
return res;
}
编写一个函数 int fact(int n)
显示整数 n
的因数,以及 returns 因数的个数。使用用户输入
main()
中调用此函数
#include<iostream>
using namespace std;
int fact(int n);
int main() {
int n,factor;
cout << "Enter an integer : ";
cin >> n;
factor = fact(n);
cout << factor;
return 0;
}
int fact(int n)
{
for (int i = 1; i <= n; ++i)
{
if (n % i == 0)
cout << i << endl;
}
return 0;
}
如果我输入 7
,我会得到 1,7,0
。我如何删除这个 0
以及如何找到因子的数量?
Fact() 总是 returns 0 所以这一行打印 0
cout << factor;
对于可以更改 fact() 的 return 值的因素数:
int fact(int n)
{
int nb = 0;
for (int i = 1; i <= n; ++i)
{
if (n % i == 0) {
cout << i << endl;
nb++;
}
}
return nb;
}
关键部分是“和returns因子的个数”。你不那样做。统计因素:
int fact(int n)
{
int count = 0;
for (int i = 1; i <= n; ++i)
{
if (n % i == 0)
{
// found a factor, add to the count
count++;
cout << i << endl;
}
}
// return the count instead
return count;
}
然后,您的主函数可以使用该计数:
factor = fact(n); // fact(n) will already print the factors
// now just print the number
cout << "Number of factors: " << factor << '\n';
你应该算在你的 int fact()
函数中。将变量设置为 0 并在当前每次显示 i 时递增。然后在函数的末尾而不是 returning 0 return 计数变量。
int fact(int n)
{
int count=0;
for (int i = 1; i <= n; ++i)
{
if (n % i == 0) {
cout << i << endl;
count++;
}
}
return count;
}
#include <iostream>
#include <vector>
std::vector<int> fact(int n);
int main() {
int n;
std::cout << "Number: ";
std::cin >> n;
std::vector<int> factors = fact(n);
for (auto i : factors) {
std::cout << i << ' ';
}
std::cout << '\n';
std::cout << "Number of factors: " << factors.size() << '\n';
return 0;
}
std::vector<int> fact(int n) {
std::vector<int> vec{1};
for (int i = 2; i <= n / 2; ++i) {
if (n % i == 0) {
vec.push_back(i);
}
}
vec.push_back(n);
return vec;
}
如果你要 return 来自 fact()
的任何东西,它应该是这些因素。为此,我使用了 std::vector
。它是一个可以按需增长的数组。数字 1 和 n 始终是因数,因此我不会费心为它们做数学运算。向量已初始化并保持值 1,我只计算 n 的一半(任何大于 n/2 的数字都不会均分,所以我的循环通过识别实际的速度完成大约一半的速度范围)。然后我将 n 添加到向量中,我 return.
我的main打印vector,vector知道自己的大小,也就是因子的个数。
或者,您可以只在 fact()
函数中进行计数。
#include <iostream>
#include <vector>
// Prints factors of n and returns the number of factors
int fact(int n);
int main() {
int n;
std::cout << "Number: ";
std::cin >> n;
int numFactors = fact(n);
std::cout << "Number of factors: " << numFactors << '\n';
return 0;
}
int fact(int n) {
int factorCount = 2; // Already counting 1 and n
std::cout << "1 ";
for (int i = 2; i <= n / 2; ++i) {
if (n % i == 0) {
std::cout << i << ' ';
++factorCount;
}
}
std::cout << n << '\n';
return factorCount;
}
您的代码的主要问题是您的函数总是 return 为零。您需要计算因素并 return 它。
除此之外,您的代码性能很差,因为循环持续的时间比需要的长得多。您可以使用 n
的平方根作为 for
循环中的限制。喜欢:
int fact(int n)
{
if (n < 1) return 0;
int res = 0;
int limit = sqrt(n);
for (int i = 1; i <= limit; ++i)
{
if (n % i == 0)
{
res += 2;
cout << i << " - " << n/i << endl;
}
}
if (limit * limit == n)
{
--res;
}
return res;
}
对于 n = 36
输出是:
1 - 36
2 - 18
3 - 12
4 - 9
6 - 6
并且 returned 值为 9
下面是另一种方法。它不使用平方根。相反,它通过使用 i
的平方作为循环限制来保持较低的循环数。
int fact(int n)
{
if (n < 1) return 0;
int res = 0;
int i = 1;
int i_square = i * i;
while (i_square < n)
{
if (n % i == 0)
{
res += 2;
cout << i << " - " << n/i << endl;
}
++i;
i_square = i * i;
}
if (i_square == n)
{
++res;
cout << i << " - " << n/i << endl;
}
return res;
}