1. 程式人生 > >高精度四則運算 完整版

高精度四則運算 完整版

1.A+B問題

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<stack>
using namespace std;
const int maxn=1000;
int *Str2Int(char *str){
    int i,len=strlen(str);
    int *a=new int[(len+1)*sizeof(int)];
    for(i=0;i<len;i++)
      a[i]=(int)str[len-i-1]-48;
      return a;


}//  將字元陣列str轉化為整型陣列;
int check(int *a,int n){
    int k=0,len=n;
    while(a[len-1]==0&&len>1)  len--;
    for(k=0;k<len;k++){
        if(a[k]>=10)
        {
            a[k+1]=a[k+1]+a[k]/10;
            a[k]=a[k]%10;
        }



    }
    if(a[k]!=0)
       len=k+1;
    return len;




}//歸整
char *Int2Str(int *a,int n){
    int i;
    char *str=new char [(n+1)*sizeof(char)];
    for(i=0;i<n;i++)
      str[i]=(char)a[n-i-1]+48;
    str[n]='\0';
    return str;




}//將整型陣列化為字元陣列

char *addition(char *m1,char *m2){
    int i,len1,len2,len,c=0;
    int *t1,*t2;
    len1=strlen(m1);len2=strlen(m2);
    len=(len1>=len2)?len1:len2;
    t1=new int[(len+2)*sizeof(int)];
    t2=new int[(len+2)*sizeof(int)];
    t1=Str2Int(m1);
    t2=Str2Int(m2);
    for(i=len1;i<len+1;i++)
       t1[i]=0;
    for(i=len2;i<len+1;i++)
       t2[i]=0;
    for(i=0;i<len;i++)
       t1[i]=t1[i]+t2[i];
    len=check(t1,len);
    return Int2Str(t1,len);





}
int main(){
    char s1[maxn],s2[maxn];
    while(cin>>s1>>s2)
          cout<<addition(s1,s2)<<endl;
    return 0;

}