/*
name: 高精度運算
author: goal00001111
date: 01-12-08 15:04
description:
高精度運算:加減乘除,乘方,階乘
*/#include
#include
using namespace std;
void reverse(string & str);
void addint(string & c, string a, string b);
void subint(string & c, string a, string b);
void mulint(string & c, string a, string b);
void jiechint(string & c, string b);
void divint(string & c, string a, string b);
void powint(string & c, string a, string b);
int main()
void reverse(string & str)
}void addint(string & c, string a, string b)//模仿遞增向量的合併方法
while (i < a.size())
while (i < b.size())
while (carry > 0)//計算進製部分
i = c.size() - 1;
while (c[i] == '0')//消除多餘的高位0
c = c.substr(0, i+1);
reverse(c);
}void subint(string & c, string a, string b)//模仿遞增向量的合併方法
bool flag = false;
if (a.size() < b.size() || (a.size() == b.size() && a < b))//交換,並得到乙個負號
reverse(a);
reverse(b); ;
int i = 0;
while (i < b.size())
i++;
}while (i < a.size())
c += a[i];
i++;
}i = c.size() - 1;
while (c[i] == '0')//消除多餘的高位0
c = c.substr(0, i+1);
if (flag)
c += '-';
reverse(c);
}void mulint(string & c, string a, string b)
reverse(a);
reverse(b);
string ta, tb, tc;
int carry = 0;
for (int i=0; i 0)//計算進製部分
//累加到c中
ta = c;
reverse(ta);
reverse(tc);
addint(c, ta, tc);
reverse(c);
//消除多餘的高位0
int pos = c.size() - 1;
while (c[pos] == '0')
c = c.substr(0, pos+1);
}reverse(c);
}void jiechint(string & c, string b)
}void divint(string & c, string a, string b)
string copya = a;//儲存a的值,之後a的值會變化
while (a == b || a.size() > b.size() || (a.size() == b.size() && a > b))//直到餘數小於除數
if (ta == b)//相等,商為1,被除數去掉前n位
else if (ta.size() > b.size() || (ta.size() == b.size() && ta > b))//被除數不小於除數
if (ta == tb)//整除
else//餘數不為0
}else//被除數小於除數,商為0 }}
while (copya.size() > c.size())//補足低位的0
c += '0';
//消除多餘的高位0
int pos = 0;
while (pos < c.size() && c[pos] == '0')
c = c.substr(pos, c.size()-pos);
if (c.size() == 0)//商為0
c = "0";
}void powint(string & c, string a, string b)
if (b == "0")
if (b == "1")
string tb;
divint(tb, b, "2");
powint(c, a, tb);
mulint(c, c, c);
if ((b[b.size()-1]-'0')%2 == 1)
mulint(c, c, a);
}
高精度運算
今天覆習了一下高精度運算。我覺得這種簡單的東西也得看一看,至少給自己留點兒低!高精度可以壓位的,但我今年懶得寫了 首先是加減法很簡單了,沒什麼值得特別強調的。高精度減法時別忘了,a時做下交換在計算,輸出時別忘了標記負號。高精度乘法需要注意的問題是,要在做完乘法之後再調整為十進位制。有的初學者小盆友喜...
高精度運算
雖說高精度直接考查的越來越少,不過還是以防萬一。define maxlen 1000 struct bint 本模板既可輸入字串,也可輸入整數 bint int t if len 1 len bint char str print number friend void print bint bi p...
高精度運算
資料讀入,加減乘除,階乘,取餘。不支援負數。乘除只支援大整數和小整數的運算。包括了所有已知的演算法競賽當中的大數運算。這應該是迭代比較完美的一代了,終於完成了高精度模板,繼續加油!const int maxlen 1005 struct bigint j num j 1 digit j bigint...