真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語(yǔ)言大數(shù)相乘函數(shù),c語(yǔ)言大數(shù)相乘的算法

c語(yǔ)言大數(shù)乘法

#includestdio.h

創(chuàng)新互聯(lián)公司擁有網(wǎng)站維護(hù)技術(shù)和項(xiàng)目管理團(tuán)隊(duì),建立的售前、實(shí)施和售后服務(wù)體系,為客戶提供定制化的網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站維護(hù)、四川樂山服務(wù)器托管解決方案。為客戶網(wǎng)站安全和日常運(yùn)維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、商城網(wǎng)站建設(shè)、政府網(wǎng)站等各類型客戶群體,為全球成百上千家企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。

void mul(int,int,int); ? ? ?//沒有返回值的話就用void,還有,你要在后面定義函數(shù)的話 ? ? ?

int count; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//先在前面聲明

int main()

{

int a,b,c;

a=19;

b=22;

c=650;

mul(a,b,c);

printf("count=a*b*c=%d\n",count);

return 0;

}

void mul(int x,int y,int z)

{

count=x*y*z;

}

c語(yǔ)言中用分治法求大數(shù)相乘的代碼

#includestdio.h

#includestring.h

#includemalloc.h

#define N 100//最大100位

/* 函數(shù)聲明 */

void calc1(char* str1,int len1,int* tmp,int m);

void accumulate(int cnt,int* res,int res_len,int* tmp,int tmp_len);

char* bignum_multi(char* str1,int len1,char* str2,int len2,char* result,int len);

int main()

{

int i,j;

/* 獲取計(jì)算數(shù)據(jù)(可以從文件中讀取) */

char str1[N]={NULL};

char str2[N]={NULL};

char result[N*N]={NULL};

printf("Input Num1: \n");

scanf("%s",str1);

fflush(stdin);

printf("Input Num2: \n");

scanf("%s",str2);

/* 計(jì)算兩個(gè)字符串的長(zhǎng)度,及存儲(chǔ)結(jié)果所需要的空間 */

int len1=strlen(str1),len2=strlen(str2);

int len=len1+len2;

/* 計(jì)算并輸出計(jì)算結(jié)果 */

printf("The result is: %s\n",bignum_multi(str1,len1,str2,len2,result,len));

return 0;

}

/*===============================================================

調(diào)用calc1和accumulate函數(shù)計(jì)算大數(shù)相乘

===============================================================*/

char* bignum_multi(char* str1,int len1,char* str2,int len2,char* result,int len)

{

int i,j,m=0,cnt=0,*tmp,*res;

/* 分配臨時(shí)結(jié)果的存放空間 */

tmp=(int*)malloc((len1+1)*sizeof(int));

res=(int*)malloc(len*sizeof(int));

/* 初始化兩個(gè)數(shù)組 */

for(i=0;ilen1;i++)

tmp[i]=0;

for(j=0;jlen;j++)

res[j]=0;

for(i=len2-1;i=0;i--)

{

/* 獲取乘數(shù)中第i位的值 */

m=str2[i]-'0';

/* 計(jì)算被乘數(shù)與第i位的乘積,結(jié)果保存在tmp整型數(shù)組中 */

calc1(str1,len1,tmp,m);

/* 將tmp數(shù)組中的值加到res數(shù)組中 */

cnt++;

accumulate(cnt,res,len,tmp,len1+1);

}

/* 將整形數(shù)組res中的值轉(zhuǎn)化成字符串存入result中 */

i=0;j=0;

/* 去掉res中第一個(gè)非零數(shù)字前的零 */

while(res[i++]==0);

for(m=i-1;mlen;m++,j++)

result[j]=res[m]+0x30;

result[j]='\0';

free(tmp);

free(res);

return result;

}

/*===============================================================

計(jì)算被乘數(shù)與乘數(shù)的某一位的乘積

===============================================================*/

void calc1(char* str1,int len1,int* tmp,int m)

{

/* d兩個(gè)位的乘積結(jié)果,remainder余數(shù),carry進(jìn)位 */

int i,d=0,remainder=0,carry=0;

/* 從被乘數(shù)字符串'\0'的前一位算起 */

for(i=len1-1;i=0;i--)

{

d=str1[i]-'0';

d*=m;

remainder=(d+carry)%10;

carry=(d+carry)/10;

tmp[i+1]=remainder;

}

if(carry)

tmp[0]=carry;

else

tmp[0]=0;

}

/*===============================================================

將被乘數(shù)與乘數(shù)中一位數(shù)字的乘積結(jié)果計(jì)入res數(shù)組中

===============================================================*/

void accumulate(int cnt,int* res,int len,int* tmp,int len1)

{

int m=0,n=0,i,k,remainder=0;

static int carry=0;

for(k=len1-1,i=0;k=0;k--,i++)

{

m=tmp[k];

n=res[len-cnt-i];

if(m+n+carry=10)

{

remainder=(m+n+carry)%10;

carry=1;

}

else

{

remainder=m+n+carry;

carry=0;

}

res[len-cnt-i]=remainder;

}

}

關(guān)于C語(yǔ)言兩個(gè)大數(shù)相乘

//#include

stdafx.h

//此頭文件不可丟

#include

stdio.h

#include

string.h

#define

N

200

//預(yù)編譯將后面數(shù)組的的長(zhǎng)度定義為200;

int

main()

{

void

GetDigits(int

a[],

char

s[]);

void

multiply(int

a[],

int

b[],

int

c[]);

char

s1[N],

s2[N];

//起初定義兩個(gè)字符串?dāng)?shù)組s1和s2,用來存儲(chǔ)兩個(gè)相乘的大數(shù);

int

i,

j,

a[N],

b[N],

c[N

*

2];

printf("\n

input

number

a:

");//輸入兩個(gè)數(shù)字的字符串;

scanf("%s",

s1);

printf("\n

input

number

b:

");

scanf("%s",

s2);

//把輸入的字符串,按位存放到數(shù)組

GetDigits(a,

s1);

GetDigits(b,

s2);

multiply(a,

b,

c);

//找到最高位

j

=

N

*

2

-

1;

while(c[j]

==

0)

j--;

//打印計(jì)算結(jié)果

printf("\n

%s

*

%s=",

s1,

s2);

for(i

=

j;

i

=

0;

i--)

printf("%d",

c[i]);

return

0;

}

//下面Getsights函數(shù)的目的是把字符串形式的數(shù)字按位存放到數(shù)組

void

GetDigits(int

*a,

char

*s)

{

int

i;

char

digit;

int

len

=

strlen(s);

for(i

=

0;

i

N;

i++)

a[i]

=

0;

for(i

=

0;

i

len;

i++)

{

digit

=

s[i];

a[len

-

1

-

i]

=

digit

-

'0';

}

}

//把a(bǔ)*b的結(jié)果存儲(chǔ)到數(shù)組c中,按位表示;

void

multiply(int

*a,

int

*b,

int

*c)

{

int

i,

j;

for(i

=

0;

i

N

*

2;

i++)

c[i]

=

0;

//先把結(jié)果數(shù)組設(shè)置為0;

for(i

=

0;

i

N;

i++)

for(j

=

0;

j

N;

j++)

c[i

+

j]

+=

a[i]

*

b[j];

//

處理進(jìn)位

for(i

=

0;

i

N

*

2

-

1;

i++)

{

c[i

+

1]

+=

c[i]

/

10;

//進(jìn)位累加到高位

c[i]

=

c[i]

%

10;

//該位的最后結(jié)果

}

}

C語(yǔ)言 大數(shù)乘法

是a[j++]=str1[i]-'0'; 這個(gè)沒看懂嗎?

因?yàn)樽址斎氪娴氖茿SCII碼。所以字符串’0‘其實(shí)在內(nèi)存里不是存的0而且一個(gè)別的數(shù)字。

這里利用到ASCII排序的規(guī)律,只要減去’0‘這個(gè)碼的值就能得到相應(yīng)的字符數(shù)字的對(duì)應(yīng)整形值了。

這個(gè)是ASCII碼的表 你看下就應(yīng)該明白了

C語(yǔ)言大整數(shù)相乘

我用C語(yǔ)言寫了一個(gè),在VC2005下測(cè)試通過。

#include stdio.h

#include string.h

typedef unsigned char CHAR;

typedef unsigned int UINT;

/*十進(jìn)制形式的a與b,注意低位在前高位在后*/

CHAR a[10000];/*被乘數(shù)*/

CHAR c[20000];/*乘積和乘數(shù)*/

UINT temp1,temp2;/*用來存放中間結(jié)果*/

UINT da, db; /*記錄a和b的位數(shù)*/

/*清零*/

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;

}

/*這個(gè)函數(shù)模擬大整數(shù)的左移*/

void LShift( CHAR* x, int digits )

{

UINT i;

for ( i = 0; i digits - 1; i ++ ) {

x[i] = x[i+1];

}

x[digits] = 0;

}

/*這個(gè)乘法函數(shù)計(jì)算大整數(shù)a與給定的y的乘積,乘積加入c右半部*/

void OneDigitMultiply( UINT y )

{

UINT i;

UINT cm = 0; /*乘法進(jìn)位*/

UINT ca = 0; /*加法進(jìn)位*/

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 {

/*如果被乘數(shù)本位是0就直接返回*/

return;

}

}

/*這個(gè)函數(shù)用來輸出*/

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("輸入被乘數(shù):");

scanf("%s",a);

printf("輸入乘數(shù):");

scanf("%s",c);

/*記錄位數(shù)*/

da = strlen( (const char*)a );

db = strlen( (const char*)c );

/*反轉(zhuǎn)以使低位在前*/

strrev( (char*)a );

strrev( (char*)c );

UINT i;

/*a與b存儲(chǔ)的是char字符,減去0x30就能直接當(dāng)數(shù)字使用了*/

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] );

}

}

/*這個(gè)乘法算法可以參看二進(jìn)制乘法器的原理*/

for ( i = 0; i db; i ++ ) {

OneDigitMultiply( c[0] );

LShift(c, 20000);

}

c[10000-db-1] = 'x'; /*給數(shù)字尾部作個(gè)標(biāo)記*/

OutputResult();

getchar();

getchar();

}

第二題:

#include stdio.h

void main()

{

float a;

scanf("%f",a);

if ( a - (int)a == 0 ) {

printf("是整數(shù)\n");

}

else {

printf("不是整數(shù)\n");

}

getchar();

getchar();

}

c語(yǔ)言大整數(shù)乘法

dc這個(gè)函數(shù)里面連b這個(gè)參數(shù)都沒有使用,這也能出結(jié)果...,

if(z[0]='0')continue 也寫錯(cuò)了

不是打擊你,你的代碼太濫了,實(shí)在不想去找錯(cuò)誤,給你我以前寫的代碼吧,你自己整理一下

#include stdio.h

int mulx(char * a,int b,char * r,int d);

void init(char * s);

char buf1[4*1024];

char buf2[4*1024];

char buf3[4*1024];

int main()

{

char * a;

char * b;

char * r;

char * t;

int d;

int i;

a = buf1;

b = buf2;

r = buf3;

init(NULL);

while(scanf("%s %d",a,d)!=EOF)

{

mulx(a,d,r,10);

printf("%s\n",r);

}

return 0;

}

char c2d[256]; //字符轉(zhuǎn)換成數(shù)字

char * charset; //代表數(shù)字的字符

/*功能:設(shè)置使用那些字符表示數(shù)字,默認(rèn)的為"0123456789ABCDEF"*/

/*參數(shù):*/

/*返回值:*/

void init(char * s)

{

int i;

if(s==NULL)

charset = "0123456789ABCDEF";

else

charset = s;

for(i=0;i256;i++)

c2d[i] = 0;

for(i=0;charset[i];i++)

c2d[charset[i]] = i;

}

/*功能:清除前導(dǎo)零*/

/*參數(shù):需要清楚的數(shù)字*/

/*返回值:清零后數(shù)字的位數(shù)*/

int clearZeros(char * a)

{

int i,j;

for(i=0;a[i]==charset[0];i++);

for(j=0;a[i];i++,j++)

a[j] = a[i];

a[j] = 0;

if(j==0)

{

a[j++] = charset[0];

a[j] = 0;

}

return j;

}

/*功能:乘,用于進(jìn)制轉(zhuǎn)換之類*/

/*參數(shù):a 和 b 分別為乘數(shù),結(jié)果保存到 r , d 為使用的進(jìn)制*/

/*注意:r 可以等于 a , b一定要小于d, 如果被乘數(shù)有前導(dǎo)0 則結(jié)果也會(huì)有前導(dǎo)0*/

/*返回值:結(jié)果的位數(shù)*/

int mulx(char * a,int b,char * r,int d)

{

int i,j,k,len;

int c,t;

if(r==NULL)

r = a;

for(i=0;a[i];i++);

len = k = i;

for(c=0,i--,r[k--]=0;i=0 ;i--,k--)

{

t = c2d[a[i]] * b + c ;

c = t/d;

r[k] = charset[t%d];

}

if(c)

{

for(i=len,j=++len;i=0;i--,j--)

r[j] = r[i];

r[0]=charset[c];

}

return len;

}


當(dāng)前文章:C語(yǔ)言大數(shù)相乘函數(shù),c語(yǔ)言大數(shù)相乘的算法
本文地址:http://weahome.cn/article/hcedhs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部