[高精度加法]例題
二、藍橋杯基礎練習 高精度加法
[高精度減法]模板(c++)
[高精度乘法]模板c++
高精度除法
p601洛谷
a+b problem(高精)
題目背景
無題目描述
高精度加法,x相當於a+b problem,b不用考慮負數。
輸入輸出格式
輸入格式:
分兩行輸入a,b<=10^500
輸出格式:
輸出只有一行,代表a+b的值
輸入輸出樣例
輸入樣例#1:
1
1
輸出樣例#1
1
#include
using namespace std;
int a[
501]
,b[501];
//長度是位數
void
add(string s1,string s2)
else
//否則不進製
c=0;
j++;}
int k=
max(len1,len2)
;while
(a[k]==0
&&k>=1)
//k>=1一定要加啊
k--;//去掉後面的0 即max位如果是0 則去掉
for(j=k;j>=
0;j--
) s[j]
=a[k-j]
+'0'
; s[k+1]
='\0'
;printf
("%s\n"
,s);
//for(i=0;i<=k;i++)
//printf("%c",s[i]);
// printf("\n");
return;}
intmain
(void
)
python:由於python的int是無長度限制的資料型別,理論上是無限長。所以python的高精度對於c++/c語言來說就像玩的一樣。
ac**:
a =
input()
b =input()
print
(int
(a)+
int(b)
)
不過時間複雜度上,c++/c更快
資源限制
時間限制:1.0s 記憶體限制:512.0mb
問題描述
輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。
演算法描述
由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。
定義乙個陣列a,a[0]用於儲存a的個位,a[1]用於儲存a的十位,依此類推。同樣可以用乙個陣列b來儲存b。
計算c = a + b的時候,首先將a[0]與b[0]相加,如果有進製產生,則把進製(即和的十位數)存入r,把和的個位數存入c[0],即c[0]等於(a[0]+b[0])%10。然後計算a[1]與b[1]相加,這時還應將低位進上來的值r也加起來,即c[1]應該是a[1]、b[1]和r三個數的和.如果又有進製產生,則仍可將新的進製存入到r中,和的個位存到c[1]中。依此類推,即可求出c的所有位。
最後將c輸出即可。
輸入格式
輸入包括兩行,第一行為乙個非負整數a,第二行為乙個非負整數b。兩個整數都不超過100位,兩數的最高位都不是0。
輸出格式
輸出一行,表示a + b的值。
樣例輸入:
20100122201001221234567890
2010012220100122
樣例輸出:
20100122203011233454668012
上面的模板1其實就是初學的時候模範別人打的有點亂,但是原理清楚,建議用這個作為參考。
#include
#include
#include
#include
using namespace std;
char a[
105]
;char b[
105]
;int sum[
150]
;void
solve()
while
(sum[k]==0
&&k>
0) k--
;for
(int i=k;i>=
0;i--
)printf
("%d"
,sum[i]);
printf
("\n");
return;}
intmain
(void
)
洛谷p2142
#include
#include
#include
#include
using namespace std;
bool compare
(string a,string b)
void
subtraction
(string a,string b)
sa[j]-=
1;if(sa[j]==0
&&j==len-
1) len--
; z+=10
;}c[i]
=z;}
int k=len-1;
while
(k>
0&&c[k]==0
) k--
;for
(int i=k;i>=
0;i--
)printf
("%d"
,c[i]);
printf
("\n");
return;}
intmain
(void
)subtraction
(a,b)
;return0;
}
或許題解中的另乙個方法更簡單,但是上面**更符合我們日常習慣吧。
高精度除法要用到高精度減法,其中減法用於試商,而不是用高精度乘法。
高精度除法還沒打,就用了一下其他博主的**塊,理清楚思路,相信能自己敲出來
步驟如下:
1、將除數和被除數對齊,被除數字數不夠時,補0。
2、利用被除數減去除數,一直減到被除數小於除數,減的次數,就是「試商」的結果,每減一次當前位結果就加乙個。
3、重複上述步驟,一直到被除數和除數的位數相等為止(求得餘數)或者達到某一精度要求。
高精度加減乘除
一。高精度乘法 敲了好久。頭禿 str1,str2是存數字的字串,返回最後的位數,c儲存結果 int highmult char str1,char str2,int c b len2 1 int i,j memset a,0,sizeof a memset b,0,sizeof b memset ...
高精度加 減 乘 除演算法實現
在說高精度加減乘除運算之前,我們先搞明白什麼是高精度運算?實際上高精度就是說參與運算的資料和運算結果的範圍,超出標準資料型別能表示的資料大小範圍的運算。這個時候,如果要得到正確的計算結果,顯然不能依靠普通方法實現了。而要在普通運算原理的基礎上,加以輔助演算法來實現超大資料的計算。例如 求兩個100位...
高精度演算法,加減乘除
高精度演算法的兩個基本問題 高精度數的表示和高精度數的基本運算 1.高精度數的表示 首先我想到的是do while 迴圈逆序存放在陣列之中,但書中用string接受並且將其轉化成數字,存放在陣列之中 int arr 100 string str cin str int len str.length ...