chenyiyun 发表于 2019-7-4 12:50:08

高精度加减法(C++)

高精度加法
#include<iostream>
#include<string>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iomanip>
using namespace std;
int main(){
    //iomanip的语法(保留x位小数):cout<<fixed<<<setprecision(正整数)<<数;
    char a1,b1;
    int a,b,c={},lena,lenb,lenc,i,x,sum;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    gets(a1);
    gets(b1);
    lena=strlen(a1);
    lenb=strlen(b1);
    for(i=0;i<=lena-1;i++){
      a=a1-48;
    }
    for(i=0;i<=lenb-1;i++){
      b=b1-48;
    }
    lenc=1;
    x=0;
    while(lenc<=lena||lenc<=lenb){
      sum=a+b+x;
      c+=sum;
      x=c/10;
      c%=10;
      lenc++;
    }
    c=x;
    if(c==0){
      lenc--;
    }
    for(i=lenc;i>=1;i--){
      cout<<c;
    }
    cout<<endl;
    return 0;
}
高精度减法
#include<iostream>
#include<string>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iomanip>
using namespace std;
int main(){
    //iomanip的语法(保留x位小数):cout<<fixed<<<setprecision(正整数)<<数;
    char n,n1,n2;
    int a,b,c={},lena,lenb,lenc,i;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    gets(n1);
    gets(n2);
    if(strlen(n1)<strlen(n2)||(strlen(n1)<strlen(n2)&&strcmp(n1,n2)<0)){
      strcpy(n,n1);
      strcpy(n2,n);
      cout<<"-";
    }
    lena=strlen(n1);
    lenb=strlen(n2);
    for(i=0;i<=lena-1;i++){
      a=int(n1-'0');
    }
    for(i=0;i<=lenb-1;i++){
      b=int(n2-'0');
    }
    i=1;
    while(i<=lena||i<=lenb){
      if(a<b){
            a+=10;
            a--;
      }
      c=a-b;
      i++;
    }
    lenc=i;
    while(c==0&&lenc>1){
      lenc--;
    }
    for(i=lenc;i>=1;i--){
      cout<<c;
    }
    cout<<endl;
    return 0;
}

这是代码,我怕太耗内存,就直接写上去了。。。
https://xxx.ilovefishc.com/album/201903/16/192522h8f7rc7f3yf9zfi9.png
页: [1]
查看完整版本: 高精度加减法(C++)