發新話題
打印

要如何修改與套用程式碼-任意連續N個整數乘積是N的倍數

推到噗浪
推到臉書
複製內容到剪貼板
代碼:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    unsigned int n,a;
    unsigned long product=1,quotient, remainder;

    cout<<"請問您要計算連續多少個數字的乘積呢? ";
    cin>>n;
    cout<<endl;
   
    cout<<"請問第一個數字是多少呢? ";
    cin>>a;
    cout<<endl;
   
   
    for(unsigned int i=0;i<n;i++)
         product*=(a+i);
   
    quotient  = product/n;
    remainder = product%n;
   
   
    for(unsigned int i=0;i<n;i++)
         cout<<(a+i)<<(i==(n-1)?"":"*");
    cout<<" = "<<product<<" = "<<n<<" * "<<quotient<<" + "<<remainder<<endl<<endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}
請不要輸入太大的數字,不然會超過 unsigned long 的上限。

TOP

引用:
原帖由 ksjeng 於 2010-2-15 12:12 PM 發表
無號整數所佔記憶體空間即可表示的範圍如下(旗標,洪維恩,C語言教學手冊第四版,P3-5)
關於無號長整數(unsigned long) 它的位元組是4 表示範圍是0到4294967295
這句話的說明是指我的電腦記憶體可處理的容量嗎
若記憶體 ...
"0到4294967295" 是指該變數可儲存的數值的大小,

並非你的電腦可處理的記憶體大小。

"它的位元組是4" 是指該變數實際佔用的記憶體大小。

TOP

在宣告 fact 函式的傳入值型別漏掉了,main 的傳入、傳回值型別也漏掉了。
複製內容到剪貼板
代碼:
/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>


int main(void)  /* 主程式 */
{

    int n;

    long fact(int n);

    printf("n!=n*(n-1)!請輸入n值:");
    scanf("%d",&n);

    printf("%d!=%ld\n",n,fact(n));

    system("PAUSE");
    return 0;
}




/* 定義fact()函數 */
long fact(int n)
{
    if (n==0)   /* 當n為0即0!=1則傳回1 */
       return(1);
    else
        return(n*fact(n-1));  /* 呼叫遞迴函數func(n-1) */
};
或是,也可以把函式的宣告放在最前面,看起來會比較整齊。
複製內容到剪貼板
代碼:
/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>

long fact(int);    /* 宣告fact()函數為長整數值 */

int main(void)  /* 主程式 */
{

    int n;


    printf("n!=n*(n-1)!請輸入n值:");
    scanf("%d",&n);

    printf("%d!=%ld\n",n,fact(n));

    system("PAUSE");
    return 0;
}

/* 定義fact()函數 */
long fact(int n)
{
    if (n==0)   /* 當n為0即0!=1則傳回1 */
       return(1);
    else
        return(n*fact(n-1));  /* 呼叫遞迴函數func(n-1) */
}
或是,把函式的定義往前放,不用寫宣告。
複製內容到剪貼板
代碼:
/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>


/* 定義fact()函數 */
long fact(int n)
{
    if (n==0)   /* 當n為0即0!=1則傳回1 */
       return(1);
    else
        return(n*fact(n-1));  /* 呼叫遞迴函數func(n-1) */
}


int main(void)  /* 主程式 */
{

    int n;


    printf("n!=n*(n-1)!請輸入n值:");
    scanf("%d",&n);

    printf("%d!=%ld\n",n,fact(n));

    system("PAUSE");
    return 0;
}
或是,把函式的定義放在另一個函式的內部,也不用寫宣告。
複製內容到剪貼板
代碼:
/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>


int main(void)  /* 主程式 */
{

    int n;

    /* 定義fact()函數 */
    long fact(int n)
    {
        if (n==0)   /* 當n為0即0!=1則傳回1 */
           return(1);
        else
            return(n*fact(n-1));  /* 呼叫遞迴函數func(n-1) */
    }

    printf("n!=n*(n-1)!請輸入n值:");
    scanf("%d",&n);

    printf("%d!=%ld\n",n,fact(n));

    system("PAUSE");
    return 0;
}

TOP

發新話題