高精度加法(可以為負數)【C++版和java版】__C++

來源:互聯網
上載者:User

高精度加法:


兩個整數相加:

#include <cstdio>#include <cstring>using namespace std;const int MAX=1001;void big_add(char a[],char b[],char c[]){    int i,e=0,d;    int len1=strlen(a);    int len2=strlen(b);    for(i=0;i<len1/2;i++)    {        char t=a[i];a[i]=a[len1-1-i];a[len1-1-i]=t;    }    for(i=0;i<len2/2;i++)    {        char t=b[i];b[i]=b[len2-1-i];b[len2-1-i]=t;    }    for(i=0;i<len1&&i<len2;i++)    {        d=a[i]-'0'+b[i]-'0'+e;        c[i]=d%10+'0';        e=d/10;    }    if(i<len1)      for(;i<len1;i++)      {          d=a[i]-'0'+e;          c[i]=d%10+'0';          e=d/10;      }    else      for(;i<len2;i++)      {          d=b[i]-'0'+e;          c[i]=d%10+'0';          e=d/10;      }    if(e) c[i++]=e+'0';    c[i]=0;    int len3=i;    for(i=0;i<len3/2;i++)    {        char t=c[i];c[i]=c[len3-1-i];c[len3-1-i]=t;    }}int main(){    char a[MAX],b[MAX],c[MAX];    while(scanf("%s%s",a,b)!=-1)    {        big_add(a,b,c);        printf("%s\n",c);    }    return 0;}



不限制正負:

#include<stdio.h>#include<stdlib.h>#include<string.h>char A[10005];char B[10005];int fa, fb;void swap(char *a, int i, int j){char t = a[i]-'0';a[i] = a[j]-'0';a[j] = t;}void add(char *a, char *b){int la = strlen(a),lb = strlen(b);int i,j,c=0,s,l;for(i=fa,j=la-1; i<=j; ++i,--j) swap(a,i,j);for(i=fb,j=lb-1; i<=j; ++i,--j) swap(b,i,j);for(i=fa; i<la||i<lb; ++i){   s = a[i] + b[i] + c;c = s/10;a[i] = s%10;}a[i] = c;l = c ? i : i-1;if(fa) printf("-");for(i=l; i>=fa; --i) printf("%d", a[i]);}int cmp(char *a, char *b){int i,j,la,lb;la = strlen(a);lb = strlen(b);if(la-fa>lb-fb)return 1;else if(la-fa<lb-fb)    return 0;else{for(i=0; i<la&&a[i+fa]==b[i+fb]; ++i);return a[i+fa]>b[i+fb];}}void minus(char *a, char *b){char *t;int i,j,ft,la,lb,c,l,s;if(!cmp(a,b)){t=a; a = b; b = t;ft = fa; fa = fb; fb = ft;}la = strlen(a);lb = strlen(b);for(i=fa,j=la-1; i<=j; ++i,--j) swap(a,i,j);for(i=fb,j=lb-1; i<=j; ++i,--j) swap(b,i,j);c = 0;l = -1;for(i=0; i+fa<la; ++i){s = a[i+fa]-b[i+fb]-c>=0 ? 0 : 1;a[i+fa] = (10+a[i+fa]-b[i+fb]-c)%10;l = a[i+fa] ? i+fa : l;c = s;}if(l<0)printf("0");else{if(fa) printf("-");    for(i=l; i>=fa; --i) printf("%d", a[i]);}}int main(){scanf("%s%s", A, B);fa = ('-'==A[0]);fb = ('-'==B[0]);if(fa^fb)minus(A,B);elseadd(A,B);}




java版:

import java.util.*;import java.io.*;import java.lang.String;import java.math.BigDecimal;public class p1036{    public static void main(String[] args)    {        String s1,s2;        Scanner cin = new Scanner(System.in);                s1 = cin.next();        s2 = cin.next();        BigDecimal b1 = new BigDecimal(s1);        BigDecimal b2 = new BigDecimal(s2);        System.out.println(b1.add(b2));        cin.close();    }}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.