家齊
Lv 6
家齊 asked in 電腦與網際網路程式設計 · 1 decade ago

c++程式求出某個數是perfect、deficient或?

請寫一個程式求出某一個數是perfect, deficient 或者

abundant。

說明:

一個整數b如果可以被另一個整數a整除(在這裡a>b),我們

稱b是a的一個因數。

Perfect Number是一個正整數並且等於其所有因數的和。

例如:

6和28都是perfect number。

因為6=1+2+3,28=1+2+4+7+14。

如果一個正整數不是perfect,那他就是deficient或者是

abundant,根據其所有因數的和是小於或大於這個數本身。

因此,9是deficient因為1+3<9。

而12是abundant因為 1+2+3+4+6>12。

Update:

抱歉,兩位的我試過都不行耶!!

有的字元好像被知識+的系列弄成錯誤了

Update 2:

error C2061: 語法錯誤 : 識別項 '_TCHAR'

error C3861: 'printf': 找不到識別項

error C3861: 'getchar': 找不到識別項

#include "stdafx.h"

這個我有改成< >這個符號了,不過系統說沒有這個字典檔

所以我將它移除掉,後會出現那些問題@@

Update 3:

TO 帥哥憨

我剛手動輸入,系統說"SCANF的宣告錯誤"

我看不懂為什麼錯誤@@

Update 4:

感謝兩位,我剛剛和同學討論出來了..

#include

using namespace std;

int main()

{

int n,buf,i;

cout<<"請輸入N:";

cin>>n;

cout<<"小於N的完美數有:";

for(i=1;i<=n;i++){

buf=0;

for(int j=1;j

Update 5:

被吃字了...懶得弄了,我交附投票喔^^|

2 Answers

Rating
  • 1 decade ago
    Best Answer

    #include &lt;iostream&gt;

    using namespace std;

    int main(void)

    {

      int n;

      while(scanf(&quot;%d&quot;,&amp;n)==1) //輸入一個數字n

      {

        if (n==0)break; //n=0的話就結束程式

        int tot=0; //設一個變數tot存所有因數的合

        for (int i=1;i&lt;n;i++)

          if (n%i==0)tot=tot+i; //把n的因數都加到tot

        if (tot&gt;n)printf(&quot;%d ABUNDANT&#92;n&quot;,n);

        if (tot==n)printf(&quot;%d PERFECT&#92;n&quot;,n);

        if (tot&lt;n)printf(&quot;%d DEFICIENT&#92;n&quot;,n);

        //最後三行判斷n是ABUNDANT,PERFECT還是DEFICIENT

      }

      return 0;

    }

    這個程式雖然是用很單純的迴圈來求

    但10的7次方以內的數都可以很快求出來了

    2009-12-13 21:14:51 補充:

    第一行是<iostream>

    2009-12-13 21:20:54 補充:

    中間的 " 是"

    >是>

    <是<

    \是\

    抱歉我忘了知識+的爛問題= =

    2009-12-13 21:24:11 補充:

    抱歉越弄越亂

    我重打一次

    #include <iostream>

    using namespace std;

    int main(void)

    {

      int n;

      while(scanf("%d",&n)==1) //輸入一個數字n

      {

        if (n==0)break; //n=0的話就結束程式

        int tot=0; //設一個變數tot存所有因數的合

        for (int i=1;i<n;i++)

          if (n%i==0)tot=tot+i; //把n的因數都加到tot

        

    2009-12-13 21:24:17 補充:

    if (tot>n)printf("%d ABUNDANT\n",n);

        if (tot==n)printf("%d PERFECT\n",n);

        if (tot<n)printf("%d DEFICIENT\n",n);

        //最後三行判斷n是ABUNDANT,PERFECT還是DEFICIENT

      }

      return 0;

    }

    2009-12-13 21:26:04 補充:

    最後記得迴圈的i跑到i

    2009-12-14 05:57:45 補充:

    最後記得迴圈的 i 跑到 n-1

    雖然n是自己的因數

    但perfect number定義的因數只到n-1

    Source(s):
  • 1 decade ago

    #include "stdafx.h"

    #include <math.h>

    #include <stdlib.h>

    static char *a[] = {"perfect", "deficient", "abundant"};

    char * perfect(int n) { // 0 == perfect, 1 == deficient, 2 == abundant

    int facSum=1;

    int i;

    for(facSum=1, i = (1+n)/2; 1<i; --i) if(0==(n%i)) facSum+=i;

    return a[(facSum == n) ? 0 : (facSum > n ? 2 : 1)];

    }

    int _tmain(int argc, _TCHAR* argv[])

    { const int N=20000; // change me if you want

    for(int i=N; 1<i; --i) printf("%d is %s\n", i, perfect(i));

    getchar();

    return 0;

    }

    2009-12-14 07:33:03 補充:

    哪行不 行? 我這是 在 ms vs 跑ㄉ ! 我想 你可寧要 改依下

    #include <...>

    2009-12-14 11:42:42 補充:

    1 到 20000 之間ㄉperfect numbers 有 8128, 496, 28, 6

Still have questions? Get your answers by asking now.