高精度加法(可以為負數)【C++版和java版】
高精度加法:
兩個整數相加:
#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);
else
add(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();
}
}
相關文章
- 基礎練習 高精度加法(java)Java
- 高精度加法(C語言實現)C語言
- 查詢數N二進位制中1的個數(JS版 和 Java版)JSJava
- java中大數處理和高精度小數處理(so easy)Java
- 大數乘法問題(C++版)C++
- CRM系統包含java版和php版JavaPHP
- 劍指offer(Java版)--將字串轉換為整數Java字串
- Python 和 c++/c/java 對於負數的儲存方式對比PythonC++Java
- Linux Mint 18 Cinnamon 版和 MATE 版已經可以下載了Linux
- C++ std::list實現大整數加法運算C++
- java二進位制正數和負數取反Java
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- 羅馬數字轉換阿拉伯數字(Java版,考慮較為全面)Java
- FPGA定點小數計算(Verilog版)第一篇——加法運算FPGA
- [Java] 超簡圖床(Java版) —— 專為Api而生Java圖床API
- Spring Quartz Java工程版和Web工程版示例SpringquartzJavaWeb
- JavaScript 負數轉換為正數JavaScript
- 俄羅斯:微軟Windows高價政策應為盜版現象負責微軟Windows
- 《Effective java 第二版 中文版》電子版Java
- C/C++模運算(正負整數)C++
- 兩隻水壺 c++版C++
- JAVA版開源數字貨幣交易平臺Java
- 安裝時為什麼連SQLServer2000企業版可以,聯桌面引擎版卻不行呢?SQLServer
- 轉載:C++之高精度演算法C++演算法
- CSDN周賽第51期:贏《C++ Primer Plus 第6版 中文版》和定製周邊C++
- c++閹割版binder實現C++
- 完美C++(第5版)(雙色)C++
- A Brief Look at C++ 中文版 (轉)C++
- 連續1的個數演算法----java版1.0演算法Java
- Java 版抖音解析介面Java
- Google Protobuf 使用 Java 版GoJava
- bloom filter 的Java 版OOMFilterJava
- pycharm社群版、專業版和教育版區別是什麼?PyCharm
- Snapkit,呼叫layoutIfNeeded後x、y為負數。APK
- 夕甲甲——孔乙己之C++版C++
- C++版演算法分析小技巧C++演算法
- 谷歌敗訴,甲骨文可以向使用 Java API 的公司收版稅了谷歌JavaAPI
- 關於C++引用做為函式引數和指標作為函式引數C++函式指標