當前位置:首頁 » 編程語言 » 超整形乘積c語言演算法
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

超整形乘積c語言演算法

發布時間: 2023-03-13 11:33:16

c語言大整數乘法

scanf("%s%s",&a,&b);
我學兩天C直接就學JAVA了。
說下我的看法吧。
a[i]-'0'
//a[i]比如i為10你裡面都沒賦值這個值我覺得是隨機的,因為操作系統與編譯器沒必要對於所引用的地址進行操作。
而且減'0'雖然'0'可以轉化成asc2碼,但是這樣做應該不行吧。。。
或者相乘超過了2的8次(c[i+j+1]不能存放這么多位,地址溢出)。

❷ C語言 如何計算長整型乘法

是32*5吧。
long int只是表示的數位多一點吧。
如果超過了的話,就會溢出。
將得出結果的long轉化為字元串來保存。
------------
水平不高。
希望對你有用。

❸ c語言如何實現兩個整數的乘法運算

親測可用

long jiecheng(int x)

{

long int i,k=1;

for(i=1;i<=x;i++)

k=k*i;

return k;

}

int main()

{

long int j,k=0;

int i;

for(i=1;i<=20;i++)

{

j=jiecheng(i);

k+=j;

}

printf("%ld ",k);

}

輸出的結果是2561327494111820313

(3)超整形乘積c語言演算法擴展閱讀:

一個正整數的階乘(factorial)是所有小於及等於該數的正整數的積,並且0的階乘為1。自然數n的階乘寫作n!。1808年,基斯頓·卡曼引進這個表示法。

亦即n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。

計算方法:

大於等於1:

任何大於等於1 的自然數n 階乘表示方法:n! =1×2×3×...×(n-1)n或n! = n×(n-1)!

0的階乘:0!=1。

參考資料:網路——階乘

❹ 編寫一個求兩個整數乘積的c語言程序

#include<stdio.h>

intmain(void)
{
intx,y;
printf("請輸入數字,空格分割 ");
scanf("%d%d",&x,&y);
printf("結果是%d ",x*y);
return0;
}

❺ C語言 1乘以到30怎麼計算啊

樓主,你可以嘗試floatproct=1;

輸出是控制一下就可以了%.0f

#include<stdio.h>

voidmain()

{

floatproct=1;

for(inti=1;i<=30;i++)proct*=i;

printf("1到30的乘積為%.0f ",proct);

}

---------------------------------

上面的可以實現啊

❻ C語言大整數相乘

我用C語言寫了一個,在VC2005下測試通過。

#include <stdio.h>
#include <string.h>

typedef unsigned char CHAR;
typedef unsigned int UINT;

/*十進制形式的a與b,注意低位在前高位在後*/
CHAR a[10000];/*被乘數*/
CHAR c[20000];/*乘積和乘數*/
UINT temp1,temp2;/*用來存放中間結果*/

UINT da, db; /*記錄a和b的位數*/

/*清零*/
void Zero( CHAR* x, UINT n )
{
UINT i;
for ( i = 0; i < n; i ++ )
x[i] = '0';
}

CHAR CharToNum( CHAR c )
{
return c - 0x30;
}

CHAR NumToChar( CHAR c )
{
return c + 0x30;
}

/*這個函數模擬大整數的左移*/
void LShift( CHAR* x, int digits )
{
UINT i;
for ( i = 0; i < digits - 1; i ++ ) {
x[i] = x[i+1];
}
x[digits] = 0;
}

/*這個乘法函數計算大整數a與給定的y的乘積,乘積加入c右半部*/
void OneDigitMultiply( UINT y )
{
UINT i;
UINT cm = 0; /*乘法進位*/
UINT ca = 0; /*加法進位*/
if ( y != 0 ) {
for ( i = 0; i < da; i ++ ) {
/*乘*/
temp1 = ((UINT)a[i]) * y + cm;
cm = temp1 / 10;
temp1 %= 10;

/*加*/
temp2 = ((UINT)c[i+10000]) + temp1 + ca;
if ( temp2 > 9 ) {
ca = 1;
temp2 -= 10;
} else {
ca = 0;
}
c[i+10000] = temp2;
}
c[da+10000] += cm + ca;
}
else {
/*如果被乘數本位是0就直接返回*/
return;
}
}

/*這個函數用來輸出*/
void OutputResult()
{
CHAR* p = c + 20000;
while( *p == 0 ) {
p --;
}
printf("乘積是:\n");
while( *p != 'x' ) {
printf("%d", *p);
p --;
}
}

void main()
{
Zero( a, 10000 );
Zero( c, 10000 );
printf("輸入被乘數:");
scanf("%s",a);
printf("輸入乘數:");
scanf("%s",c);

/*記錄位數*/
da = strlen( (const char*)a );
db = strlen( (const char*)c );
/*反轉以使低位在前*/
strrev( (char*)a );
strrev( (char*)c );

UINT i;

/*a與b存儲的是char字元,減去0x30就能直接當數字使用了*/
for ( i = 0; i < 10000; i ++ ) {
if ( a[i] != '\0' ) {
a[i] = CharToNum( a[i] );
}
}
for ( i = 0; i < 20000; i ++ ) {
if ( c[i] != '\0' ) {
c[i] = CharToNum( c[i] );
}
}

/*這個乘法演算法可以參看二進制乘法器的原理*/
for ( i = 0; i < db; i ++ ) {
OneDigitMultiply( c[0] );
LShift(c, 20000);
}
c[10000-db-1] = 'x'; /*給數字尾部作個標記*/

OutputResult();

getchar();
getchar();
}

第二題:
#include <stdio.h>

void main()
{
float a;
scanf("%f",&a);
if ( a - (int)a == 0 ) {
printf("是整數\n");
}
else {
printf("不是整數\n");
}
getchar();
getchar();
}