實現高精度的加法、減法、快速除法。
#include
#include
#include
#include
using
namespace std;
class
bign
;bign
(string a)
;void
add(
const bign& a)
;//加法
void
minus
(const bign& a)
;//減法
bign devide
(const bign& a)
;//除法,返回商,自己變成餘數
friend ostream&
operator
<<
(ostream &out,
const bign &obj)
;int
compare
(const bign& a)
;private
: string data;
//低位在前,高位在後 };
intmain()
bign bign::
devide
(const bign& a)
copy_a=a;
t=data.
size()
-len-1;
}//減法 (直接做減法會超時)
while
(compare
(copy_a)
>=0)
return ans;
}void bign::
minus
(const bign& a)
else
}for
(temp=newlen-
1;ans[temp]
=='0'
;temp--);
ans.
erase
(temp+1)
;this
->data=ans;
}int bign::
compare
(const bign& a)
return0;
}void bign::
add(
const bign& a)
if(rel[newlen-1]
=='0'
)rel.
erase
(newlen-1)
;this
->data=rel;
}ostream&
operator
<<
(ostream &out,
const bign &obj)
else
return out;
}bign::
bign
(string a)
給出乙個整數 n(n< 10^30) 和 k 個變換規則(k< =15)。
規則:一位數可變換成另乙個一位數:
規則的右部不能為零。
例如:n=234。有規則(k=2):
2-> 5
3-> 6
上面的整數 234 經過變換後可能產生出的整數為(包括原數):
234、534、264、564
共 4 種不同的產生數
問題:給出乙個整數 n 和 k 個規則。
求出:經過任意次的變換(0次或多次),能產生出多少個不同整數。
僅要求輸出個數。
234 2
2 53 6
(a) 先用floyd演算法,求出某乙個數字可以到達的目的地(即經過0次或若干次變換的結果)
(b) 高精度運算
但是int(4位元組)的範圍是[-2^31^,2^31^-1],即[-2147483648,2147483647],
用乙個int來表示1個數字太浪費了,可以用1個int來儲存8位數(為了使得乘法不越界),
#include
#include
#include
#define inf 99999
using namespace std;
class bign
vector<
int> data;
void
mult
(int k)
; friend ostream& operator<<
(ostream &out, bign& obj)
;static
int n;};
int bign:
:n=10000000
;void bign:
:mult
(int k)
if(t)
data.
push_back
(t);
}ostream& operator<<
(ostream &out,bign& obj)
return out;
}int
numofdig
(int k)
return rel;
}int
main()
//flody演算法的三重迴圈
for(
int k=
0;k<
10;k++
)for
(int i=
0;i<
10;i++
)for
(int j=
0;j<
10;j++)if
(d[i]
[j]>d[i]
[k]+d[k]
[j])
d[i]
[j]=d[i]
[k]+d[k]
[j];
int flag[10]
=;//用於記錄該數字會變成幾種其他數字
for(
int i=
0;i<
10;i++)if
(0)cout<} cout<<
"*******************"
int i=
0;i<
10;i++
) cout<<<
' ';cout
"*******************"
<} bign rel(1
);for(
int i=
0;ilength()
;i++
) rel.
mult
(flag[n[i]
-'0'])
; cout
}
ACM 藍橋杯練習題
小a的學校有一些小河和一些湖泊,現在把它們統一看成水池,小a手裡有一張學校某處的地圖,這個地圖上僅標識了此處是否是水池,小a想知道這塊地方有多少個水池,現在,任務交給你了,請編寫程式算出該地圖中有幾個水池 第一行輸入乙個整數n,表示共有n組測試資料 每一組資料都是先輸入該地圖的行數m 輸出該地圖中水...
藍橋杯)基礎練習 高精度加法
時間限制 1.0s 記憶體限制 512.0mb 問題描述 輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。演算法描述 由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。定義乙個陣列a,a 0 用於儲存a的個位,a 1 用於儲存a的十位,...
藍橋杯基礎練習 高精度加法
問題描述 輸入兩個整數a和b,輸出這兩個整數的和。a和b都不超過100位。演算法描述 由於a和b都比較大,所以不能直接使用語言中的標準資料型別來儲存。對於這種問題,一般使用陣列來處理。定義乙個陣列a,a 0 用於儲存a的個位,a 1 用於儲存a的十位,依此類推。同樣可以用乙個陣列b來儲存b。計算c ...