高精度演算法是一種對於類似a+b problem,a*b problem等的 擴充套件;為什麼這麼說吶?是因為這兩者有共同的目的:即實現數與數間的四則運算;但是我們都知道,在計算機運算中,是有其限制的——數大小的限制;但是,不可能任何時間都只是去讓程式做乙個較小範圍的運算,故此,有大佬發明了高精度運算這一演算法。怎麼發明的吶?
在繼續看下去之前,我勸你想一想
再繼續向下看!!!
試問,加法的核心思想是什麼?
有如下這個式子:
它的核心就在於,同位數相加,然後進製,同位數相加,再加上進製值; 換成計算機語言就可以用陣列來表達:
c陣列存的是結果,a存的是第乙個數的值,b存的是第二個數的值,x是進製。
注意,要先將x初始化為0!
大概的步驟如下:
**1.定義陣列,字串;
2.初始化陣列為0;
3.輸入數字,即正向代入到字串;
4.反向代入到陣列;
5.運算;
6.刪除多的0;
7.反向輸出結果;**
這就是加法的核心思想;下面就是高精度運算加法的程式:
#include
#include
using
namespace
std;
int main()
減法這個東西啊,和加法能有啥區別吶?
沒錯,還是那句話,先自己想想!!!
減法和其他程式不同的是:要判斷所計算的數值的大小,進行比較;當然,在運算方面也有一些不同;
減法核心程式若此:
#include
#include
#include
#include
using
namespace
std;
#define fil(a,b) memset(a,b,sizeof(a))
const
int maxn=10004;
struct none_negative_big_number_operate
inline
bool cmp()
return
0;
} void minus()
while (!ans[mxlen]&&mxlen) --mxlen;
if (!mxlen)
if (bg) printf("-");
while (mxlen) printf("%d",ans[mxlen--]);
puts("");
} }bn;
int main()
核心思想:
string mul(string &a,string &b)
}
**:
#include
using
namespace
std;
int main()
, b[240] = , c[480] = ;
int i, j, ka, kb, k;
char a1[240], b1[240];
gets(a1);
ka = strlen(a1);
gets(b1);
kb = strlen(b1);
k = ka + kb;
for(i = 0; i < ka; i++) a[i] = a1[ka-i-1] - '0';
for(i = 0; i < kb; i++) b[i] = b1[kb-i-1] - '0';
for(i = 0; i < ka; i++)
for(j = 0; j < kb; j++)
if(!c[k]) k--;
for(i = k-1; i >= 0; i--) printf("%d", c[i]);
}
好啦,高精度就講到這裡了,有疑問的可以找 高精度運算
今天覆習了一下高精度運算。我覺得這種簡單的東西也得看一看,至少給自己留點兒低!高精度可以壓位的,但我今年懶得寫了 首先是加減法很簡單了,沒什麼值得特別強調的。高精度減法時別忘了,a時做下交換在計算,輸出時別忘了標記負號。高精度乘法需要注意的問題是,要在做完乘法之後再調整為十進位制。有的初學者小盆友喜...
高精度運算
雖說高精度直接考查的越來越少,不過還是以防萬一。define maxlen 1000 struct bint 本模板既可輸入字串,也可輸入整數 bint int t if len 1 len bint char str print number friend void print bint bi p...
高精度運算
name 高精度運算 author goal00001111 date 01 12 08 15 04 description 高精度運算 加減乘除,乘方,階乘 include include using namespace std void reverse string str void addin...