加法進製: 下標低位是個位,高位是十位、百位。輸出的時候倒著輸出。計算著時候必須先儲存個位
c[i] = a[i] + b[i];
if(c[i] >= 10)
減法進製: a[i]-b[i]
if(a[i] < b[i])
c[i] = a[i] - b[i];
乘法進製: 看不懂,下面會解釋
e[i+j-1] = c[i] * d[j] + e[i+j-1]; //新計算的值+累計原位置的值
if(e[i+j-1] >= 10)
個位存在前面比較好,容易進製。如果個位存在後面,前面產生進製,就需要整體後移。求兩個不超過200位的非負整數的和。
有兩行,每行是乙個不超過200位的非負整數,可能有多餘的前導0。
一行,即相加後的結果。結果裡不能有多餘的前導0,即如果結果是342,那麼就不能輸出為0342。
22222222222222222222
33333333333333333333
55555555555555555555
#include using namespace std;
const int maxn = 205;
char m[maxn],n[maxn];
int a[maxn],b[maxn],c[maxn];
int main(int argc, char const *ar**)
} //去除c的後置0
int p = maxn-1;
while(c[p] == 0)
for(int i = p; i >= 0; i--) cout << c[i];
return 0;
}
求兩個大的正整數相減的差。
共2行,第1行是被減數a,第2行是減數b(a > b)。每個大整數不超過200位,不會有多餘的前導零。
一行,即所求的差。
9999999999999999999999999999999999999
9999999999999
9999999999999999999999990000000000000
#include using namespace std;
const int maxn = 205;
char a[maxn],b[maxn];
int c[maxn],d[maxn],e[maxn];
int main(int argc, char const *ar**)
} int p = maxn;
while(e[p] == 0) p--;
for(int i = p; i >= 0; i--)
return 0;
}
c[i] 與 a[i]*b[j]的乘積、進製、原來的c[i]有關
}做除法時,每一次的商的值都在0~9,每次求得的餘數連線以後的若干位得到的新的被除數,繼續做除法。因此,在做高精度除法時,要涉及到乘法運算和減法運算,還有移位處理。
當然為了程式簡潔,可以避免高精度乘法,用0~9次迴圈減法取代商的值。
這裡,我們討論一下高精度數除以當精度數的結果,採取的方法是按位相除法。
}實質上,在做高精度數運算的時候,儲存高精度數的陣列元素可以不僅僅只保留一位數字,而可以採取保留多位數,這樣,在做運算,特別是乘法運算時,可以減少很多操作。
用減法模擬除法,對被除數的每一位都減去除數,一直減到當前位置的數字(包含前面的餘數)小於除數。
有點難。暫且放下
C 奧賽一本通刷題高精度題解
title c 奧賽一本通刷題記錄 高精度 date 2017 11 15 tags c 奧賽一本通刷題記錄 高精度 2017.11.15 by gwj1139177410 大整數加法 openjudge10 add template include include include using na...
佇列(一本通)
這道題重點是關係的轉換和初始化 include include include includeusing namespace std int a 101 記錄接著的的那個節點 int n,m int main int ans void bfs int x,int y int main cout in...
一本通1083 計算星期幾
假設今天是星期日,那麼過abab 天之後是星期幾?兩個正整數a a,b b,中間用單個空格隔開。0 100,010000 0。乙個字串,代表過a b a b天之後是星期幾。其中,mon day monday是星期一,tue sday tuesday是星期二,wed nesd ay wednesday...