【发布时间】:2017-12-20 00:15:54
【问题描述】:
我正在尝试实现一个函数来分解一个数字,到目前为止我有这个代码:
int * factor(int n) {
int * vet;
//
int p = 2;
int index = 0;
while(n > 1) {
while(n % p != 0) {
p++;
index++;
}
n = n / p;
vet[index]++;
}
return vet;
}
这个函数应该返回一个数组,其中包含数字n 的每个素数的幂。像这样:
如果 1200 = 2x2x2x2x3x5x5,则 1200 = 2^4 + 3^1 + 5^1,因此如果参数为 1200,则函数应返回数组 {4,1,0,3}。
如果 440 = 2x2x2x5x11,则 440 = x^3 + 5^1 + 11^1,该函数应返回数组 {3,0,0,1,0,0,0,0,0, 1}
我的问题是在我开始分解过程之前是否存在某种方法来确定vet 的大小,在while 循环中。
另外,使用这个结果数组(或上面概念的一些变体),是否有可能找到这个数字的 2 的幂?例如:
440 = 1x2^8 + 1x2^7 + 0x2^6 + 1x2^5 + 1x2^4 + 1x2^3 + 0x2^2 + 0x2^1 + 0x2^0 产生数组 {1,1,0,1,1,1,0,0,0}
1200 = 1x2^10 + 0x2^9 + 0x2^8 + 1x2^7 + 0x2^6 + 1x2^5 + 1x2^4 + 0x2^3 + 0x2^2 + 0x2^1 + 0x2^0 产生数组 {1,0,0,1,0,1,1,0,0,0,0}
【问题讨论】:
-
首先,
vet是一个未初始化的变量,您的代码通过访问它会表现出未定义的行为。 -
如果您的代码有具体问题,请提供minimal reproducible example 进行演示。如果您没有具体问题,那么您希望得到什么样的答案? StackOverflow 不是免费的代码编写服务。如果这是一个家庭作业,你可能会发现这个很有趣meta.stackoverflow.com/questions/334822/…
-
-
std::vector<int> vet;。现在你的问题少了。 -
@IgorTandetnik 但是如果我不能在这里使用
std:vetor,问题仍然存在;真的不可能为此分配一个数组,找到一个长度值吗?