高精求加ADD(string a,string b)返回字符串
string ADD(string a,string b){
string result;
//加法循环次数取决于数位多的
//假设字符串a为数位多的,利用此法
if(b.size()>a.size()){
string tmp=a;
a=b;
b=tmp;
}
int len_a=a.size();
int len_b=b.size();
//将字符串b高位补足0,方便计算,但要以防b高位有数,所以b='0'+b
for(int i=0;i<len_a-len_b;i++){
b='0'+b;
}
int num=0;//本位
int up=0;//进位
for(int i=len_a-1;i>=0;i--){
num=(a[i]-'0')+(b[i]-'0')+up;
up=num/10;//有进位up=1,无进位up=0
num%=10;
result=(char)(num+'0')+result;//新得的数放前面
}
//如过仍然有进位
if(up){
result=(char)(up+'0')+result;//首位加上进位
}
return result;
高精度乘法MUL(string a,string b)返回字符串
string MUL(string a,string b){
//乘0需要特殊处理
if(a=="0"||b=="0")
return "0";
string result;
int len_a=a.size();
int len_b=b.size();
int num;//本位
int up=0;//进位
for(int i=len_a-1;i>=0;i--){
string tmp;
for(int j=len_b-1;j>=0;j--){
num=(a[i]-'0')*(b[j]-'0')+up;
up=num/10;
num%=10;
tmp=(char)(num+'0')+tmp;
}
//若仍然有进位,加在开头
if(up){
tmp=(char)('0'+up)+tmp;
}
//乘上每个部分的权重
for(int k=0;k<len_a-1-i;k++){
tmp=tmp+'0';
}
result=ADD(tmp,result);
}
return result;
FAC(int i)
string FAC(int n){
string result="1";
for(int i=1;i<=n;i++){
string tmp;
tmp=to_string(i);
result=MUL(tmp,result);
}
return result;
}
以下代码可以用作高精与单精度
#include<bits/stdc++.h>
using namespace std;
const int N = 10000;
int a[N], b[N], c[N];//a,b存要相加的数字,c为和数
int pa, pb, pc;
void ADD() {
int num = 0, up = 0;
if (pa < pb) {//将数位比较少的数高位补0
int len = pb - pa;//循环差值次
for(int i = pa; i <= len+pa; i++)
a[i] = 0;
pa = pa + len;
}
else {
int len = pa - pb;
for (int i = pb; i <= len+pb; i++)
b[i] = 0;
pb = pb + len;
}
for (int i = 0; i < pa; i++, pc++) {
num = a[i] + b[i] + up;
up = num / 10;
c[i] = num % 10;
}
if (up) {//两数相加的和的位数最多比最大的数的数位多一位
c[pc] = up;
pc++;
}
}
void MUL() {
for (int i = 0; i < pa; i++) {
for (int j = 0; j < pb; j++) {
c[i + j] += a[i] * b[j];
c[i + j + 1] += c[i + j] / 10;
c[i + j] %= 10;
}
}
pc = pa + pb;
while (c[pc - 1] == 0 && pc > 1)pc--;//去掉前导0
}
int main() {
string A, B;//字符串来接受方便知晓位数
cin >> A >> B;
for (int i = 0; i < A.size(); i++)
a[i] = A[A.size() - i - 1] - '0';//逆序存储在整形数组中
pa = A.size();
for (int i = 0; i < B.size(); i++)
b[i] = B[B.size() - i - 1] - '0';
pb = B.size();
MUL();
for (int i = pc - 1; i >= 0; i--)
cout << c[i];
}