高精度运算

这篇博客探讨了高精度计算中的基本操作——加法和减法,详细阐述了如何进行高精度数值的相加和相减,以实现超越常规数据类型精度的计算。

加法

#include<stdio.h>
#include<string.h>
int main(){
 char a[1000],b[1000];
 
 while(scanf("%s%s",a+1,b+1)==2){
  a[0]='0';
  b[0]='0';
  int leng1=strlen(a)-1,leng2=strlen(b)-1;
  if(leng1>=leng2){
   for(int i=0; i<leng2; i++){ /*由于字符可以直接转ascii码进行运算,所以无需转数字/*
    a[leng1-i]=a[leng1-i]+b[leng2-i]-'0';
   }
   for(int i=leng1; i>=1; i--){
    if(a[i]>'9'){
     a[i-1]++;
     a[i]-=10;
    }
   }
   if(a[0]=='1')printf("1");
   for(int i=1; i<=leng1; i++)printf("%c",a[i]);
   putchar('\n');
  }
  else{
   for(int i=0; i<leng1; i++){
    b[leng2-i]=b[leng2-i]+a[leng1-i]-'0';
   }
   for(int i=leng2; i>=1; i--){
    if(b[i]>'9'){
     b[i-1]++;
     b[i]-=10;
    }
   }
   if(b[0]=='1')printf("1");
   for(int i=1; i<=leng2; i++)printf("%c",b[i]);
   putchar('\n');
  }
 }
}

减法

#include<stdio.h>
#include<string.h>
int main(){
 char a[1000],b[1000],temp[1000];
 int c[1000],d[1000],tem;//减法的话,需要判断正负//
 while(scanf("%s%s",a,b)==2){
  
  int leng1=strlen(a),leng2=strlen(b);
  if(leng1==leng2){
   if(strcmp(a,b)==0){
    printf("0\n");
    continue;
   }
   if(strcmp(a,b)<0){
    strcpy(temp,b);
    strcpy(b,a);
    strcpy(a,temp);
    tem=leng1;
    leng1=leng2;
    leng2=tem;
    printf("-");
   }
  }
  if(leng1<leng2){
   strcpy(temp,b);
   strcpy(b,a);
   strcpy(a,temp);
   tem=leng1;
   leng1=leng2;
   leng2=tem;
   printf("-");
  }
  for(int i=0; i<leng1; i++)c[i]=a[i]-'0';
  for(int i=0; i<leng2; i++)d[i]=b[i]-'0';
  for(int i=1; i<=leng2; i++)c[leng1-i]=c[leng1-i]-d[leng2-i];
  for(int i=leng1-1; i>=1; i--){
   if(c[i]<0){
    c[i]+=10;
    c[i-1]--;
   }
  }
  int p=0;
  while(c[p]==0)p++;//将多余的0删除//
  for(int i=p; i<leng1; i++)printf("%d",c[i]);
  putchar('\n');
   
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值