標題: 要如何修改與套用程式碼-任意連續N個整數乘積是N的倍數 [打印本頁]
作者: ksjeng 時間: 2010-2-14 22:03 標題: 要如何修改與套用程式碼-任意連續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 編輯 ]
作者: weiye 時間: 2010-2-15 00:08
複製內容到剪貼板
代碼:
#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 的上限。
作者: ksjeng 時間: 2010-2-15 10:55
老師早
謝謝您
自從上次你給的迴圈提示之後
我發現語言程式真的可以幫助數學猜想的驗證喔
且網路上有好多偉人們寫好的程式
老師的程式設計功力深厚 著實讓人佩服
新年快樂
作者: ksjeng 時間: 2010-2-15 12:12
無號整數所佔記憶體空間即可表示的範圍如下(旗標,洪維恩,C語言教學手冊第四版,P3-5)
關於無號長整數(unsigned long) 它的位元組是4 表示範圍是0到4294967295
這句話的說明是指我的電腦記憶體可處理的容量嗎
若記憶體越大,它就可以處理越大的數字處理嗎?
位元組是4表示相當於兩個國字嗎?
作者: weiye 時間: 2010-2-16 01:13
引用:
原帖由 ksjeng 於 2010-2-15 12:12 PM 發表
無號整數所佔記憶體空間即可表示的範圍如下(旗標,洪維恩,C語言教學手冊第四版,P3-5)
關於無號長整數(unsigned long) 它的位元組是4 表示範圍是0到4294967295
這句話的說明是指我的電腦記憶體可處理的容量嗎
若記憶體 ...
"0到4294967295" 是指該變數可儲存的數值的大小,
並非你的電腦可處理的記憶體大小。
"它的位元組是4" 是指該變數實際佔用的記憶體大小。
作者: ksjeng 時間: 2010-2-17 10:11
謝謝老師詳細的解惑
新年快樂
作者: ksjeng 時間: 2010-2-22 01:16 標題: 懇請老師撥冗協助測試與指正程式碼錯誤的地方
/* 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) */
}
執行結果如下:
作者: weiye 時間: 2010-2-22 19:21
在宣告 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;
}
作者: ksjeng 時間: 2010-2-23 00:20
老師晚安
我利用您寫的第三個程式測試成功了
謝謝您願意指導我這個程式語言的生手
平安
歡迎光臨 Math Pro 數學補給站 (https://math.pro/db/) |
論壇程式使用 Discuz! 6.1.0 |