好文档 - 专业文书写作范文服务资料分享网站

信息学奥赛一本通算法(C 版)基础算法:高精度计算资料

天下 分享 时间: 加入收藏 我要投稿 点赞

信息学奥赛一本通算法(C++版)基础算法:高精度计算

高精度加法(大位相加) #include using namespace std; int main() {

char a1[100],b1[100];

int a[100],b[100],c[100];//a,b,c分别存储加数,加数,结果 int lena,lenb,lenc,x,i;

memset(a,0,sizeof(a));//数组a清零 memset(b,0,sizeof(b));//数组b清零 memset(c,0,sizeof(c));//数组c清零 //gets(a1); //gets(b1); //getchar();

while(scanf(\ {

lena=strlen(a1); lenb=strlen(b1); for(i=0;i<=lena;i++)

a[lena-i]=a1[i]-'0';//将数串a1转化为数组a,并倒序存储 //a[i]=a1[lena-i-1]-48; for(i=0;i<=lenb;i++)

b[lenb-i]=b1[i]-'0';//将数串a1转化为数组a,并倒序存储 //b[i]=b1[lenb-i-1]-48;

lenc=1; //lenc表示第几位 x=0; //x是进位 while(lenc<=lena||lenc<=lenb) {

c[lenc]=a[lenc]+b[lenc]+x;//第lenc位相加并加上次的进位 x=c[lenc]/10;//向高位进位

c[lenc]%=10;//存储第lenc位的值 lenc++;//位置下标变量 }

c[lenc]=x; if(c[lenc]==0)

lenc--; //处理最高进位 for(i=lenc;i>=1;i--) cout<

return 0;

}

高精度减法(大位相减)

#include using namespace std; int main() {

char n[256],n1[256],n2[256]; int a[256],b[256],c[256]; int lena,lenb,lenc,i; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c));

while(scanf(\为被减数,n2为减数 {

if(strlen(n1)n2时,返回正整数;n1

strcpy(n,n1);//将n1数组的值完全赋值给n数组 strcpy(n1,n2);

strcpy(n2,n);//处理被减数和减数时,交换被减数和减数 cout<<\交换了减数和被减数,结果为负数 }

lena=strlen(n1); lenb=strlen(n2); for(i=0;i<=lena;i++)

a[lena-i]=(int)(n1[i]-'0');//被减数放入数组a中 for(i=0;i<=lenb;i++)

b[lenb-i]=(int)(n2[i]-'0');//减数放入数组b中 i=1;

while(i<=lena||i<=lenb) {

if(a[i]

a[i]+=10;//不够减,那么向高位借1当10 a[i+1]--; }

c[i]=a[i]-b[i];//对应位相减 i++; }

信息学奥赛一本通算法(C 版)基础算法:高精度计算资料

信息学奥赛一本通算法(C++版)基础算法:高精度计算高精度加法(大位相加)#includeusingnamespacestd;intmain(){chara1[100],b1[100];inta[100],b[100],c[100];//a,b,c分别存储加数,加数
推荐度:
点击下载文档文档为doc格式
08cnt6hozj7s7tu43p391qw0b8cvba00t2n
领取福利

微信扫码领取福利

微信扫码分享