信息学奥赛一本通算法(C版)基础算法高精度计算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高精度加法(大位相加)
#include
using namespace std;
int main()
{
char a1[100],b1[100];
int a[100],b[100],c[100];>
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("%s%s",&n1,&n2)!=EOF)//n1为被减数,n2为减数
{
if(strlen(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++; } lenc=i; while((c[lenc]==0)&&(lenc>1)) lenc--;//最高位的0不输出 for(i=lenc;i>=1;i--) cout< cout< } return 0; }