實數加法

這裏寫圖片描述

  • 這是一道高精度下的實數加法,我們和高精度整數加法的思想一樣,只是將數分爲兩個部分,整數部分和小數部分,在進行相加,最後輸出時注意小數部分末尾的0,要處理掉,下面是代碼
#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N=110;
int flag=0;

void ni(char a[])
{
    int len=strlen(a);
    char b[N];
    for(int i=0;i<len;i++)
        b[i]=a[i];
    for(int i=0;i<len;i++)
        a[i]=b[len-1-i];
}

void add(char a[],char b[])
{
     ni(a);
     ni(b);
    int lena=strlen(a),lenb=strlen(b),i,j;
    for(i=0;i<lena&&i<lenb;i++){
        int t=a[i]-'0'+b[i]-'0'+flag;
        a[i]=t%10+'0';
        flag=t/10;
    }
    int max0=i;
    for(j=i;j<lena;++j){
        int t=a[j]-'0'+flag;
        a[j]=t%10+'0';
        flag=t/10;
        max0=j+1;
    }
    for(j=i;j<lenb;++j){
        int t=b[j]-'0'+flag;
        a[j]=t%10+'0';
        flag=t/10;
        max0=j+1;
    }
    if(flag==1)
    {
        a[max0]='1';
        a[max0+1]='\0';
    }
    else
        a[max0]='\0';
}

void qu(char a[])
{
    int len=strlen(a);
    int i=0;
    while(a[i]=='0'){
        i++;
    }
    for(int j=0;j<len-i;j++){
        a[j]=a[j+i];
    }
    a[len-i]='\0';
}

int main()
{
    char a[N],b[N];
    scanf("%s %s",a,b);
    int lena=strlen(a),lenb=strlen(b);
    char a1[N],a2[N],b1[N],b2[N];
    int i,j;
    for(i=0;i<lena;i++){
         if(a[i]=='.')
            break;
         a1[i]=a[i];
    }
    a1[i]='\0';
    for(j=i+1;j<lena;j++){
        a2[j-i-1]=a[j];
    }
    a2[j-i-1]='\0';
    for(i=0;i<lenb;i++)
    {
        if(b[i]=='.')
            break;
        b1[i]=b[i];
    }
    b1[i]='\0';
    for(j=i+1;j<lenb;j++){
        b2[j-i-1]=b[j];
    }
    b2[j-i-1]='\0';
    int lena2=strlen(a2),
        lenb2=strlen(b2),
        mlen=lena2;
    if(lena2<lenb2){
        for(int i=lena2;i<lenb2;i++){
            a2[i]='0';
        }
        a2[lenb2]='\0';
        mlen=lenb2;
    }
    else if(lena2>lenb2){
        for(int i=lenb2;i<lena2;i++){
            b2[i]='0';
        }
        b2[lena2]='\0';
    }
    add(a2,b2);
    a2[mlen]='\0';
    qu(a2);
    ni(a2);
    add(a1,b1);
    ni(a1);
    printf("%s.%s\n",a1,a2);
    return 0;
}
發佈了57 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章