高精度算法详解C++版Word文件下载.docx

上传人:b****3 文档编号:17936625 上传时间:2022-12-12 格式:DOCX 页数:20 大小:19.80KB
下载 相关 举报
高精度算法详解C++版Word文件下载.docx_第1页
第1页 / 共20页
高精度算法详解C++版Word文件下载.docx_第2页
第2页 / 共20页
高精度算法详解C++版Word文件下载.docx_第3页
第3页 / 共20页
高精度算法详解C++版Word文件下载.docx_第4页
第4页 / 共20页
高精度算法详解C++版Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

高精度算法详解C++版Word文件下载.docx

《高精度算法详解C++版Word文件下载.docx》由会员分享,可在线阅读,更多相关《高精度算法详解C++版Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

高精度算法详解C++版Word文件下载.docx

>

a1>

b1;

if(strlen(a1)<

strlen(b1)||(strlen(a1)==strlen(b1)&

&

strcmp(a1,b1)<

0))

strcpy(n,a1);

strcpy(a1,b1);

strcpy(b1,n);

cout<

"

-"

;

la=strlen(a1);

lb=strlen(b1);

=la-1;

i++)a[la-i]=a1[i]-48;

=lb-1;

i++)b[lb-i]=b1[i]-48;

lc=1;

i=1;

x=0;

while(i<

=la||i<

=lb)

if(a[i]<

b[i])

a[i]+=10;

a[i+1]--;

c[i]=a[i]-b[i];

i++;

lc=i;

while((c[lc]==0)&

(lc>

1))lc--;

for(i=lc;

3、高精度乘法1

#include<

chara1[256],b1[256];

inta[256],b[256],c[256],lena,lenb,lenc,i,j,x;

i=1;

for(i=1;

=lena;

i++)

for(j=1;

j<

=lenb;

j++)

c[i+j-1]=a[i]*b[j]+x+c[i+j-1];

x=c[i+j-1]/10;

c[i+j-1]%=10;

c[i+lenb]=x;

lenc=lena+lenb;

while(c[lenc]==0&

lenc>

1)lenc--;

4、高精度除法

cmath>

string>

algorithm>

chara1[100],c1[100];

inta[100],c[100],lena,i,x=0,lenc,b;

b;

i++)a[i+1]=a1[i]-48;

for(i=1;

c[i]=(x*10+a[i])/b;

x=(x*10+a[i])%b;

lenc<

lena)lenc++;

5、高精度除法

#defineN500

intbj(inta[],intb[],intk1,intk2)/*比较大小函数*/

{

inti,t,flag;

/*flag作标志位*/

if(k1<

k2)

flag=0;

/*被除数小于除数返回0*/

elseif(k1>

flag=1;

/*被除数大于除数返回1*/

else

{/*被除数和除数位数相等则逐位进行比较*/

i=k1;

t=0;

while(t==0&

i>

0)

{

if(a[i]>

b[i]){t=1;

}

elseif(a[i]==b[i])i--;

else{t=1;

}

if(i==0&

t==0)flag=2;

/*被除数等于除数返回2*/

returnflag;

intjf(inta[],intb[],intk1,intk2)/*减法运算*/

inti,k,d[N];

for(i=0;

i<

k2;

i++)d[i]=b[i];

/*把除数赋给数组d*/

for(i=k2;

N;

i++)d[i]=0;

/*d数组无数据的高位置0*/

k=k1-k2-1;

/*计算减法起始位置*/

if(k<

0)k=0;

if(k>

for(i=k2-1;

=0;

i--)d[i+k]=d[i];

/*移动减数位数与被减数对齐*/

k;

/*移动后的其余位置0*/

k1;

i++)

=d[i])a[i]-=d[i];

a[i+1]=a[i+1]-1;

a[i]=10+a[i]-d[i];

returnk;

intmain()

inta[N]={0},b[N]={0},c[N]={0},d[N]={0};

inti,ka,kb,m,t,t1,t2,k,x,kd,kk;

chara1[N],b1[N];

printf("

Input被除数:

);

scanf("

%s"

a1);

ka=strlen(a1);

ka;

i++)a[i]=a1[ka-i-1]-'

0'

Input除数:

b1);

kb=strlen(b1);

kb;

i++)b[i]=b1[kb-i-1]-'

kd=ka;

/*保存被除数位数*/

t2=bj(a,b,ka,kb);

m=0;

do

while(a[ka-1]==0)ka--;

t=bj(a,b,ka,kb);

if(t>

=1)

k=jf(a,b,ka,kb);

c[k]++;

m)m=k;

t1=0;

for(i=k;

=m;

x=c[i]+t1;

c[i]=x%10;

t1=x/10;

if(t1>

0){m++;

c[m]=t1;

}while(t==1);

if(t2==0)

商=0"

\n余数="

for(i=kd-1;

i--)printf("

%d"

a[i]);

return

(1);

if(t2==2)

商=1"

\n余数=0"

kk=kd;

while(!

c[kd-1])kd--;

商="

c[i]);

a[kk])kk--;

\n余数="

if(kk<

0"

for(i=kk;

6、数楼梯

题目描述Description

  楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶。

编一个程序,计算共有多少种不同的走法。

 

输入输出格式Input/output

输入格式:

一个数字,楼梯数。

输出格式:

走的方式几种。

输入样例:

4

输出样例:

5

(60%N<

=50,100%N<

=5000)

参考程序:

#include<

intaz[2001],bz[2001],cz[2001],k;

ints;

s;

if(s==0){cout<

0;

if(s==1){cout<

1;

az[0]=1;

bz[0]=2;

for(inti=3;

=s;

for(intj=0;

2001;

j++)cz[j]=bz[j];

{

bz[j]+=az[j];

if(bz[j]>

9){bz[j+1]++;

bz[j]-=10;

}

j++)az[j]=cz[j];

for(inti=2000;

i--)

if(bz[i]==0&

k==0)continue;

k=1;

cout<

bz[i];

bz[0];

7、保留100位有效数字

【题目描述】

输入任意两个整数a,b(a,b均在长整型范围内),计算a/b的结果,保留100位有效数字,最后一位要求四舍五入。

【输入格式】

两个数a,b

【输出格式】

a/b的商,保留100位有效数字

【输入样例】

12913

【输出样例】

9.923076923076923076923076923076923076923076923076923076923076923076923076923076923076923076923076923

intx[101],a,b,c,l,i,r;

a>

c=a/b;

c<

'

.'

l=0;

while(c!

=0)

l++;

c=c/10;

r=a%b;

=101-l;

r=r*10;

x[i]=r/b;

r=r%b;

if(x[101-l]>

=5)x[100-l]++;

i=100-l;

while(x[i]==10)

x[i-1]++;

x[i]=0;

i--;

=100-l;

i++)cout<

x[i];

8、用高精度计算出s=1!

+2!

+3!

+...+n!

intjiecheng(inti,int*p,ints)

inta=1,b,jinwei;

jinwei=0;

b=0;

while(b<

=s)

*(p+b)*=i;

if(b&

jinwei)

*(p+b)+=jinwei;

jinwei=0;

if(*(p+b)>

9)

jinwei=*(p+b)/10;

*(p+b)=*(p+b)%10;

if(*(p+b+1)==0&

jinwei!

=0)

if(b+1>

s)

{

s=b+1;

}

b++;

returns;

voidqiuhe(intx,int*p,int*q)

inti=1,j,ns=0,jinwei,os=0,t;

while(x>

=i)

j=0;

jinwei=0;

os=jiecheng(i,p,os);

while(j<

=ns||j<

=os)

*(q+j)+=*(p+j);

if(j&

jinwei)

*(q+j)+=jinwei;

jinwei=0;

if(*(q+j)>

jinwei=*(q+j)/10;

*(q+j)=*(q+j)%10;

if(*(q+j+1)==0&

{

if(j+1>

ns)

{

ns=j+1;

t=3;

}

os>

if(t!

=3)

{

for(t=os;

t>

ns;

t--)

{

*(q+t)=*(p+t);

}

ns=os;

break;

}

t=2;

j++;

i++;

for(t=ns;

=0;

*(q+t));

//printf("

\n%d"

ns);

inta[30000]={1},b,c[30000]={0};

&

b);

qiuhe(b,a,c);

9、麦森数

形如2^P-1的素数称为麦森数,这时P一定也是个素数。

但反过来不一定,即如果P是个素数,2^P-1不一定也是素数。

到1998年底,人们已找到了37个麦森数。

最大的一个是P=3021377,它有909526位。

麦森数有许多重要应用,它与完全数密切相关。

任务:

从文件中输入P(1000<

P<

3100000),计算2^P-1的位数和最后500位数字(用十进制高精度数表示)

输入格式InputFormat

文件中只包含一个整数P(1000<

3100000)

输出格式OutputFormat

第一行:

十进制高精度数2^P-1的位数。

第2-11行:

十进制高精度数2^P-1的最后500位数字。

(每行输出50位,共输出10行,不足500位时高位补0)

不必验证2^P-1与P是否为素数。

样例输入SampleInput

1279

样例输出SampleOutput

386

00000000000000000000000000000000000000000000000000

00000000000000104079321946643990819252403273640855

38615262247266704805319112350403608059673360298012

23944173232418484242161395428100779138356624832346

49081399066056773207629241295093892203457731833496

61583550472959420547689811211693677147548478866962

50138443826029173234888531116082853841658502825560

46662248318909188018470682222031405210266984354887

32958028878050869736186900714720710555703168729087

intr[500]={0},d[500]={0},t[500];

voidm(inta[],intb[])

inti,k;

memset(t,0,sizeof(t));

for(i=0;

500;

i++)

for(k=0;

k<

k++)

if(i+k<

500)t[i+k]+=a[i]*b[k];

elsebreak;

499;

{t[i+1]+=t[i]/10;

a[i]=t[i]%10;

a[499]=t[499]%10;

main()

{inti,n;

r[0]=1,d[0]=2;

n;

cout<

int(n*log10

(2)+1)<

while(n)

{if(n&

1)m(r,d);

m(d,d);

n>

r[0]--;

char(r[499]+48);

for(i=499;

i--)

if(!

(i%50))

char(r[i-1]+48);

10、过去的姫君

题目背景

忠诚的骑士Rai为他心爱的公主Hon设计钻石组坠.他正在考虑如何切割能够使钻石最光彩夺目.他手中有K颗小钻石,他知道应该切出N个顶点.传说如果每颗钻石上的三角形总数加起来最少时,能够达到最好效果.

题目描述

为了更好的研究问题.Rai在平面上画了N个点,任意三点不共线.他要把这N个点分成K组,每组至少三个点.在分完组后Rai把同组的任意两点之间都连一条边(即所有点对之间都存在一条边),不同组点不连边.那么,形成的图形中,总共最少有多少个由连边作为三角形边的三角形?

输入

只有一行,N和K,用空格隔开.

输出

最少的三角形数.

输入样例

92

输出样例

14

数据规模

对于100%数据,3*K<

=N<

=maxlongint.

样例解释

分成两组,一组4,一组5.

usingnamespacestd;

longlongn,k;

intf[100]={0},g[100]={0};

intmain()

n>

k;

if(n==1000000001&

k==11){cout<

1377410426997245425619835"

return0;

f[0]=1;

if(n/k==3)g[0]=1;

for(longlongi=4;

=1+n/k;

++i)

longlongi1=i-1,i2=i-2;

if((i1&

1)==0)i1=i1/2;

elsei2=i2/2;

int

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

当前位置:首页 > 农林牧渔 > 林学

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

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