㈠ 請大神幫我看一下這道c語言題目!!!求n個數的最小公倍數!!!在線等!!!
這是因為雖然最後的結果是32位整數,但是a*b的結果不一定是啊,有可能會超,所以lcm函數中的計算順序需要調換一下,return a/gcd(a, b)*b;
㈡ 用C語言編寫程序求兩個數的最小公倍數,並輸出
如圖使用輾轉相除法求最小公倍數:
(2)c語言求n個數的最小公倍數擴展閱讀:
輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm),是求最大公約數的一種方法。
它的具體做法是:用較大數除以較小數,再用出現的余數(第一餘數)去除除數,再用出現的余數(第二餘數)去除第一餘數,如此反復,直到最後余數是0為止。如果是求兩個數的最大公約數,那麼最後的除數就是這兩個數的最大公約數。
兩個數的最大公約數是指能同時整除它們的最大正整數。
設兩數為a、b(a2b),求a和b最大公約數(a,b)的步驟如下:
(1)用a除以b(a2b),得a÷b=q..n(0≤n)。
(2)若rn=0,則(a,b)=b;
(3)若r10,則再用b除以n,得b÷n=q..2(0sr2)
(4)若r2=0,則(a,b)=rn;若r20,則繼續用r1除以r2,.…,如此下去,直到能整除為止。
其最後一個余數為0的除數即為(a,b)的最大公約數。
㈢ 求大神 c語言 求n個數的最小公倍數 我是哪裡錯了
#include<stdio.h>/*求n個數的最小公倍數*/
intmain()
{
inta[1000]={0,90,15,60,30};
intn,i,r,t;
while(~scanf("%d",&n))/*我的思路是求出前兩個數的最小公倍數再與下一個數求*/
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
if(a[i]<a[i+1])//先要保證小數放到後面
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
t=a[i]*a[i+1];
while(r=a[i]%a[i+1])/*求兩個數的最大公約數a[i+1]*/
{
a[i]=a[i+1];
a[i+1]=r;
}
a[i+1]=t/a[i+1];/*求出最小公倍數賦給a[i+1],再與下一個數求最大公倍數*/
}
printf("%d ",a[i]);//循環結束後,最後一個有效數據是a[i],即a[n]
}
return0;
}
㈣ C語言 n個數的最小公倍數!。。。求解
#include "stdio.h"
int yue(int x,int y){
int d=(x>y?1:-1);
while(1){
if(d==1){
x=x%y,d=-1;
if(x==0){
return y;
}
}
else{
y=y%x,d=1;
if(y==0){
return x;
}
}
}
}
int bei(int x,int y){
return x*y/yue(x,y);
}
int main(){
int n;
scanf("%d",&n);
int i;
int x,y=1;
for(i=0;i<n;i++){
scanf("%d",&x);
y=bei(y,x);
}
printf("%d",y);
return 0;
}
㈤ C語言求n個數的最小公倍數
你輸入的n是1吧,當你輸入1時,程序運行到for語句時,i的初值為1,由於條件判斷語句1<1不滿足,所以for語句根本就沒有執行。你精心設計最大公約數函數不僅沒有執行,甚至y也沒有被賦值。程序直接轉到printf語句。直接輸出的就是x,也就是你說的輸入的第一個數。由於程序使用了while語句,所以該程序不會自行結束。仍會等待你重新輸入n進行下一輪計算。
解決方法:在for語句i初始值由1改為0,即i=0,或程序運行時,n值你直接輸入2,但for循環只執行一次,然後依次輸入x,y的值。ps:其實你的程序,運行沒有錯,演算法設計的不是很好。我是把i改成0了。運行結果如圖。
㈥ C語言程序設計:求n個數的最小公倍數。
原理:求最小公倍數,則先求最大公約數,最後所有數之積再除最大公約數即為最小公倍數
求兩個數最大公約數原理:利用輾轉相除法....自己網路一下,有詳細
int
gcd(int
a,
int
b)
{
if
(a
==
0)
return
b;
if
(b
==
0)
return
a;
if
(a
<
b)
//交換兩個數,使大數放在m上
{
int
tmp
=
a;
a
=
b;
b
=
tmp;
}
while
(b
!=
0)
{
int
tmp
=
a
%
b;
a
=
b;
b
=
tmp;
}
return
a;
}
利用函數gcd()返回數存在c,最後最小公倍數就為m
=
a
*
b
/
c
三個或者以上求最小公倍數時,先求前兩個數最大公約數,然後用最大公約數跟下一個數求最大公約數,如此類推,最後把所有數相乘再除以最後得出的最大公約數,即為最小公倍數
我只給出思路而已,由於我沒做過,如果你想要完成程序,就聯系我吧
㈦ C語言 求n個數的最小公倍數 acm 2028
MIN函數里的
t=b*c;
這里如果b 和 c 很大,運算結果會溢出。
正確做法是先求出最大公約數 MAX,再計算最小公倍數 b / MAX * c;
㈧ C語言求一組數的最小公倍數
求OJ.
我是一樓,確實沒有調試過。
不好意思。。。
#include <stdio.h>
int gcd(int x, int y)
{
if(x==0)
return y;
if(y==0 || x==y)
return x;
return gcd(x%y,y%x);
}
int main()
{
int n,i,t,s;
scanf("%d",&n);
scanf("%d",&t);
for(i=1;i<n;i++)
{
scanf("%d",&s);
t = t*s/gcd(t,s);
}
printf("%d\n",t);
}
㈨ c語言求最小公倍數
不知道你要什麼樣的,這個是我以前的一個作業,你自己改改就行了。
#include<stdio.h>
void
main()
{
int
a;
printf("請輸入您要判斷的一個整數,並按回車鍵\n");
scanf("%d",&a);
if(a%3==0&&a%5==0&&a%7==0)
printf("此數能被3,5,7整除\n");
else
if(a%3==0&&a%5==0)
printf("此數能被3,5整除\n");
else
if(a%3==0&&a%7==0)
printf("此數能被3,7整除\n");
else
if(a%5==0&&a%7==0)
printf("此數能被5,7整除\n");
else
if(a%3==0)
printf("此數能被3整除\n");
else
if(a%5==0)
printf("此數能被5整除\n");
else
if(a%7==0)
printf("此數能被7整除\n");
else
printf("此數不能被3,5,7任何一個數整除\n");
}
㈩ c語言求n個數的最大公約數和最小公倍數求個程序 剛入門不要太難的。。。
#include<stdio.h>
intmain()
{
inta[100],n,i,d;
printf("請輸入您所要輸入的數字個數 ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
while(a[i]%a[0]!=0)
{
d=a[i];
a[i]=a[0];
a[0]=d%a[0];
}
}
printf("您所輸入的數字最大公約數為:%d",a[0]);
}