c語言連乘
① c語言連乘練習
程序是幹嘛 求你輸入的這個數的乘積嗎?
main()
{ int a,b,c,d,e,f,h,g,i;
long j;
scanf("%d%d%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&h,&g,&i);
//逗號呢?大小寫是不一樣的?兩個c?d e呢?
j = a*b*c*d*e*f*g*h*i;
//計算乘積
printf("j=%ld\n",j);
//long 對應 %ld
}
② 動態規劃 矩陣連乘 c語言
#include <stdio.h>
#include <limits.h>
#include<stdlib.h>
#define LENGTH 6
void MatrixChainOrder(int p[],int m[][LENGTH],int s[][LENGTH])
{
int n=LENGTH;
int i,j,k,r,t;
for(i=0;i<n;i++)
m[i][i]=0;
for( r=1;r<n;r++)
{
for(i=0;i<n-r;i++)
{
j=i+r;
m[i][j]=m[i][i]+m[i+1][j]+p[i]*p[i+1]*p[j+1];
s[i][j]=i;
for(k=i+1;k<j;k++)
{
t=m[i][k]+m[k+1][j]+p[i]*p[k+1]*p[j+1];
printf("t=%d;,m[%d][%d]=%d\n",t,i,j,m[i][j]);
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;
}
}
}
}
}
int main()
{
int p[] = {30,35,15,5,10,20,25};
int m[LENGTH][LENGTH];
int s[LENGTH][LENGTH];
int i,j,k;
MatrixChainOrder(p,m,s);
printf("最少數乘次數:\n");
for(i = 0;i<LENGTH;i++)
{ for(j = 0 ;j<=i ;j++ )
printf(" ");
for(k = i; k<LENGTH;k++)
printf("%8d",m[i][k]);
printf("\n");
}
printf("斷開位置:\n");
for(i = 0;i<LENGTH;i++)
{ for(j = 0 ;j<=i ;j++ )
printf(" ");
for(k = i; k<LENGTH;k++)
printf("%4d",s[i][k]);
printf("\n");
}
system("Pause");
return 0;
}
③ C語言 1到N的乘積
#include<stdio.h>
int main()
{
int i,s = 1;
int N;
scanf("%d", &N);
for(i = 1; i<=N; i++)
s *=i;
printf("%d", s);
return 0;
}
(3)c語言連乘擴展閱讀:
階乘定義:
階乘是基斯頓·卡曼(Christian Kramp,1760~1826)於 1808 年發明的運算符號,是數學術語。
一個正整數的階乘(factorial)是所有小於及等於該數的正整數的積,並且0的階乘為1。自然數n的階乘寫作n!。1808年,基斯頓·卡曼引進這個表示法。
亦即n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。
定義的必要性:
由於正整數的階乘是一種連乘運算,而0與任何實數相乘的結果都是0。所以用正整數階乘的定義是無法推廣或推導出0!=1的。即在連乘意義下無法解釋「0!=1」。
給「0!」下定義只是為了相關公式的表述及運算更方便。
參考資料來源:網路-階乘
④ C語言分式連乘問題,求簡化+可以輸入很大很大的數字
你每次乘以一個新的分式之後就進行約分,使你的分式始終保持最簡形式,則就可以不需要大整數了。如果實在要用的話VC6.0也可以用64位的整數啊,不過它是用_int64表示(無需添加任何特殊頭文件),輸出格式則為printf(「%I64d", ...); 例如
_int64 a = 98765432198765 * 2;
printf("%I64d", a);
不用大整數,程序則可如下做
#include <stdio.h>
int gcd(int x, int y) {
int m, n;
m = ((x > y) ? x : y);
n = ((x <= y) ? x : y);
if(m % n == 0) return n;
else return gcd(n, m % n);
}
void main( )
{
int a, b, c, x, y, n, i;
scanf("%d", &n);
x = 1; y = 1;
for(i = 0; i < n; i++) {
scanf("%d%d", &a, &b);
x *= a;
y *= b;
c = gcd(x, y);
x /= c;
y /= c;
}
if(y != 1) printf("%d/%d\n", x, y);
else printf("%d\n", x);
}
⑤ 編寫計算1到100的連乘的C語言程序
/*computing the sum of 1 to 100and the factorial of 100*/
#include <stdio.h>
int main()
{
int count;
int sum=0;
double fac=1;
for (count=1;count<=100;count++)
{
sum=sum+count;
fac=fac*count;
}
printf("The sum of 1 to 100 is %d\n",sum);
printf("The factorial of 100 is %e",fac);
return(0);
}
⑥ C語言中連乘的問題
原因是這樣的:
第一種方法是三個整數連乘,這三個整數的取值范圍都在int能夠表示的范圍內,連乘的結果C語言仍然採用int容納,但實際上這三個數的連乘結果已經超出了int能夠表示的范圍,於是變成了負數,最後把這個負數送給a變數存儲;
第二種方法分成兩個階段,第一個階段先計算前兩個數的乘法,結果能夠用int正常表示,然後存儲到a這個long long類型的變數中,第二步用a再乘以512,注意此時是一個long long類型的變數與int類型的變數相乘,C語言會把int提升為long long,然後再計算,所以此時可以得到正確的結果。
⑦ C語言連乘時結果錯誤
13! = 6227020800
long int 在32位情況下依舊為4位(我用sizeof(long int)試過),所以和int范圍一樣,不能存的下13!,1932053504是溢出的結果
可以使用long long int(gcc下)或者__int64(VC中)來存結果,輸出分別用%lld和%I64d
⑧ c語言中不能連乘嗎
語言中不能連乘嗎:可以。對於矩陣的連乘,只能按照矩陣的定義來求取相應的元素,opencv里倒是應用了矩陣的概念,但是c++的設計理念。
⑨ C語言連乘編程
這不就是5!么?
main()
{
int i ,s=1;
for(i=1;i<=5;i++)
s*=i;
printf("%d\n,s");
}