大整数加减乘除Word下载.docx

上传人:b****1 文档编号:15367044 上传时间:2022-10-29 格式:DOCX 页数:15 大小:18.24KB
下载 相关 举报
大整数加减乘除Word下载.docx_第1页
第1页 / 共15页
大整数加减乘除Word下载.docx_第2页
第2页 / 共15页
大整数加减乘除Word下载.docx_第3页
第3页 / 共15页
大整数加减乘除Word下载.docx_第4页
第4页 / 共15页
大整数加减乘除Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

大整数加减乘除Word下载.docx

《大整数加减乘除Word下载.docx》由会员分享,可在线阅读,更多相关《大整数加减乘除Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

大整数加减乘除Word下载.docx

for(inti=s1.size()-1;

i>

=0;

i--)

carry+=s1[i]-'

;

carry+=s2[i]-'

c.insert(c.begin(),carry%10+'

carry/=10;

if(carry>

0)

returnc;

}

 

大整数减法

stringBigSubtraction(strings1,strings2)

stringresult;

boolFlag=false;

intcarry=0,len1,len2;

if(s1==s2)

{result="

0"

returnresult;

elseif(s1.size()<

s2.size())

swap(s1,s2);

len1=s1.size();

len2=s2.size();

Flag=true;

if(s1.size()==s2.size()&

&

s1<

s2)

{swap(s1,s2);

Flag=true;

if(carry+(s1[i]-'

)-(s2[i]-'

)<

{

carry=carry+10+(s1[i]-'

result.insert(result.begin(),carry+'

carry=-1;

}

else

carry=carry+(s1[i]-'

carry=0;

intf=0;

while(result[f]=='

{

result.erase(result.begin());

f++;

if(Flag==true)

result.insert(result.begin(),'

-'

returnresult;

大整数乘法

stringmultiplication(stringstr1,stringstr2)

intmaxsize=200;

//表示计算结果的长度

inta[210],b[210],c[410];

//分别为maxsize+10;

maxsize+10;

maxsize*2+10;

inti;

for(i=0;

i<

i++)a[i]=b[i]=0;

maxsize*2+10;

i++)c[i]=0;

intlen1,len2;

len1=str1.size();

len2=str2.size();

intj;

for(j=0,i=len1-1;

i>

i--)//把数字倒过来

a[j++]=str1[i]-'

for(j=0,i=len2-1;

i--)//倒转第二个整数

b[j++]=str2[i]-'

i<

len2;

i++)//用第二个数乘以第一个数,每次一位

for(j=0;

j<

len1;

j++)

c[i+j]+=b[i]*a[j];

//先乘起来,后面统一进位

maxsize*2;

i++)//循环统一处理进位问题

if(c[i]>

=10)

c[i+1]+=c[i]/10;

c[i]%=10;

stringResult="

"

for(i=maxsize*2;

(c[i]==0)&

(i>

=0);

i--);

//跳过高位的

if(i>

=0)

for(;

Result+=c[i]+'

Result="

returnResult;

大整数除法求商

#defineMAX_LEN200

intan1[MAX_LEN+10];

intan2[MAX_LEN+10];

intaResult[MAX_LEN+10];

intSubstract(int*p1,int*p2,intnLen1,intnLen2)

if(nLen1<

nLen2)

return-1;

if(nLen1==nLen2)

for(i=nLen1-1;

i>

=0;

i--)

if(p1[i]>

p2[i])break;

elseif(p1[i]<

p2[i])return-1;

for(i=0;

i<

nLen1;

i++)

p1[i]-=p2[i];

if(p1[i]<

0)

p1[i]+=10;

p1[i+1]--;

for(i=nLen1-1;

=0;

i--)

if(p1[i])

returni+1;

return0;

stringDivision(strings1,strings2)

inti,j;

intnLen1=s1.size();

memset(an1,0,sizeof(an1));

memset(an2,0,sizeof(an2));

memset(aResult,0,sizeof(aResult));

for(j=0,i=nLen1-1;

i>

i--)

an1[j++]=s1[i]-'

intnLen2=s2.size();

for(j=0,i=nLen2-1;

an2[j++]=s2[i]-'

nLen2)

Result="

returnResult;

intnTimes=nLen1-nLen2;

if(nTimes>

0)

for(i=nLen1-1;

=nTimes;

an2[i]=an2[i-nTimes];

for(;

i--)

an2[i]=0;

nLen2=nLen1;

for(j=0;

j<

j++)

intnTmp;

while((nTmp=Substract(an1,an2+j,nLen1,nLen2-j))>

=0)

nLen1=nTmp;

aResult[nTimes-j]++;

for(i=MAX_LEN;

(i>

=0)&

(aResult[i]==0);

i--);

if(i>

=0)

Result+=aResult[i]+'

求N!

#include<

stdio.h>

math.h>

intmain()

longm,i,j,a[10000],n,c;

while(scanf("

%ld"

&

n)>

a[0]=1;

m=0;

for(i=1;

=n;

i++)

c=0;

=m;

a[j]=a[j]*i+c;

c=a[j]/10000;

a[j]%=10000;

if(c>

m++;

a[m]=c;

printf("

a[m]);

for(i=m-1;

%4.4ld"

a[i]);

\n"

Floyd(任意两点间的最短距离)

//别人的测试代码六度分离

string.h>

iostream>

usingnamespacestd;

#defineN110

#defineMAX

intg[N][N][N],path[N][N];

intn,m;

voidfloyd()

for(intk=1;

k<

k++)

for(inti=1;

for(intj=1;

{

g[k][i][j]=g[k-1][i][j];

if(g[k][i][j]>

g[k-1][i][k]+g[k-1][k][j])

{

g[k][i][j]=g[k-1][i][k]+g[k-1][k][j];

}

}

%d%d"

n,&

m)!

=EOF)

inti;

for(i=1;

if(i==j)

g[0][i][j]=g[0][j][i]=0;

else

g[0][i][j]=g[0][j][i]=MAX;

for(i=0;

m;

intx,y;

scanf("

x,&

y);

g[0][x+1][y+1]=g[0][y+1][x+1]=1;

floyd();

i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1