發新話題
打印

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

推到噗浪
推到臉書

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

老師好:
我想要證明任意連續N個整數乘積都會是N的倍數
我發現有一個現成的程式可以套用(http://www2.lssh.tp.edu.tw/~jing/teach/c-ex/wh9.txt)
如輸入21 22 23 24 25必定是5的倍數
程式碼:
// while 一組數字的乘積
#include <iostream.h>
#include <stdlib.h>
main()
{
   int a,t=1;
   cout<<"此程式能計算一組整數數字的乘積。\n";
   cout<<"請輸入一個數字(輸入0為結束):";
   cin>>a;
   if (a!=0)              //若輸入值為0則結束程式
   {
     while(a!=0)          //當a不為0則while迴圈計算輸入值之乘積
     {
       t=t*a;             //將輸入之a值相乘
       cin>>a;
     }
     cout<<"計算結果為"<<t<<"\n";
   }
   system("PAUSE");
}

請問這個程式碼要如何修改成我實際需要的
但我又覺得N!是連續N個數相乘積的特例
似乎底下程式就可以套用
http://www2.lssh.tp.edu.tw/~jing/teach/c-ex/func-1.txt
我該如何切入啊
程式碼:
/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>
main()                               /* 主程式 */
{
  int n;
  long fact();                       /* 宣告fact()函數為長整數值 */
  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) */
}

[ 本帖最後由 ksjeng 於 2010-2-14 10:35 PM 編輯 ]

TOP

老師早
謝謝您
自從上次你給的迴圈提示之後
我發現語言程式真的可以幫助數學猜想的驗證喔
且網路上有好多偉人們寫好的程式
老師的程式設計功力深厚 著實讓人佩服
新年快樂

TOP

無號整數所佔記憶體空間即可表示的範圍如下(旗標,洪維恩,C語言教學手冊第四版,P3-5)
關於無號長整數(unsigned long) 它的位元組是4 表示範圍是0到4294967295
這句話的說明是指我的電腦記憶體可處理的容量嗎
若記憶體越大,它就可以處理越大的數字處理嗎?
位元組是4表示相當於兩個國字嗎?

TOP

謝謝老師詳細的解惑
新年快樂

TOP

懇請老師撥冗協助測試與指正程式碼錯誤的地方

/* func-1 利用遞迴函數求N! */
#include <stdio.h>
#include <stdlib.h>
main()
/*
主程式 */

{

int n;


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


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)
/*
n00!=1則傳回1 */


return(1);


else


return(n*fact(n-1));
/*
呼叫遞迴函數func(n-1) */

}

執行結果如下:

TOP

老師晚安
我利用您寫的第三個程式測試成功了
謝謝您願意指導我這個程式語言的生手
平安

TOP

發新話題