C ++输出不清楚

时间:2015-10-29 22:03:39

标签: c++

我试图找到一个数字(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;
 }

2 个答案:

答案 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