我试图找到一个数字(n)的所有除数,并将那些处于第一次幂的除数(只出现一次)添加到数组中,但是我输出的只是零,什么& #39;我的代码错了吗?
#include<iostream>
using namespace std;
int k,A[100000],n,p,d=2,pozitia=0;
int main()
{
cin>>n;
while(n>1)
{
p=0;
while(n%d==0)
{
p=p+1;
n=n/d;
}
if (p==1) { A[pozitia]=d; pozitia++; }
d=d+1;
}
for (int i=0;i<=pozitia;i++) cout<<A[pozitia]<<" ";
return 0;
}
答案 0 :(得分:3)
您始终打印相同的值:
for (int i=0;i<=pozitia;i++)
cout<<A[pozitia]<<" ";
应该是
for (int i=0;i<pozitia;i++)
cout<<A[i]<<" ";
另外请注意它应该是i<pozitia
而不是i<=pozitia
,因为每次插入新值时都会增加pozitia
,所以最后pozitia
将指向A
中未初始化的值。
答案 1 :(得分:2)
我无法按照你的逻辑来计算除数。它似乎比你想象的要简单得多。
set datefirst 1; --set first day of week to monday
select
DATEADD(DAY,(DATEPART(WEEKDAY, dt) - 1) * -1,dt) as WeekBeginDate,
SUM(hours) AS TotalHours
from hours
where
uid = 'test1'
and dt >= CAST(DATEADD(WEEK,-6,DATEADD(DAY,(DATEPART(WEEKDAY, GETDATE()) - 1) * -1,GETDATE())) AS date)
group by DATEADD(DAY,(DATEPART(WEEKDAY, dt) - 1) * -1,dt)
这是一个使用该逻辑的程序。
int stop = n/2 + 1;
for ( ; d < stop; ++d )
{
if ( n % d == 0 )
{
A[pozitia]=d;
pozitia++;
}
}
#include<iostream>
using namespace std;
void printDivisors(int A[], int pozitia)
{
for (int i=0;i<pozitia;i++) cout<<A[i]<<" ";
}
void fun(int n)
{
int A[100000];
int d = 2;
int pozitia=0;
int stop = n/2 + 1;
for ( ; d < stop; ++d )
{
if ( n % d == 0 )
{
A[pozitia]=d;
pozitia++;
}
}
printDivisors(A, pozitia);
}
int main()
{
int n;
cin>>n;
fun(n);
return 0;
}
的输入输出:
100