《信息学奥赛一本通算法(C版)基础算法高精度计算.doc》由会员分享,可在线阅读,更多相关《信息学奥赛一本通算法(C版)基础算法高精度计算.doc(4页珍藏版)》请在三一文库上搜索。
1、高精度加法(大位相加)#include using namespace std;int main() char a1100,b1100; int a100,b100,c100;/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(%s%s,&a1,&b1)!=EOF) lena=strlen(a1); le
2、nb=strlen(b1); for(i=0;i=lena;i+) alena-i=a1i-0;/将数串a1转化为数组a,并倒序存储 /ai=a1lena-i-1-48; for(i=0;i=lenb;i+) blenb-i=b1i-0;/将数串a1转化为数组a,并倒序存储 /bi=b1lenb-i-1-48; lenc=1; /lenc表示第几位 x=0; /x是进位 while(lenc=lena|lenc=1;i-) coutci; coutendl; return 0;高精度减法(大位相减)#include using namespace std;int main() char n25
3、6,n1256,n2256; int a256,b256,c256; int lena,lenb,lenc,i; memset(a,0,sizeof(a); memset(b,0,sizeof(b); memset(c,0,sizeof(c); while(scanf(%s%s,&n1,&n2)!=EOF)/n1为被减数,n2为减数 if(strlen(n1)strlen(n2)|(strlen(n1)=strlen(n2)&strcmp(n1,n2)n2时,返回正整数;n1n2时,返回负整数 strcpy(n,n1);/将n1数组的值完全赋值给n数组 strcpy(n1,n2); strcpy(n2,n);/处理被减数和减数时,交换被减数和减数 cout-;/交换了减数和被减数,结果为负数 lena=strlen(n1); lenb=strlen(n2); for(i=0;i=lena;i+) alena-i=(int)(n1i-0);/被减数放入数组a中 for(i=0;i=lenb;i+) blenb-i=(int)(n2i-0);/减数放入数组b中 i=1; while(i=lena|i=lenb) if(ai1) lenc-;/最高位的0不输出 for(i=lenc;i=1;i-) coutci;/输出结果 coutendl; return 0;