演算法學習 Day6

2022-09-02 12:51:09 字數 4454 閱讀 4834

實現乙個加法器,使其能夠輸出a+b的值。

輸入包括兩個數a和b,其中a和b的位數不超過1000位。
可能有多組測試資料,對於每組資料,

輸出a+b的值。

示例1

2 6

10000000000000000000 10000000000000000000000000000000

8

10000000000010000000000000000000

#include 

"stdio.h

"#include

"iostream

"#include

"string.h

"using

namespace

std;

struct

biginteger

size = 0

; }

//this is an init function.

void

set(char str)}}

biginteger

operator + (const biginteger &a) const

if(nextmove!=0

)

return

ret;

};void

output()

}cout

<}

}a,b,c;

intmain()

return0;

}

以前寫密碼學設計的時候就一直聽說有高精度的設計,今天終於也實現了一把高精度的加法。因為從前沒有接觸過,所以也把思想放這裡,方便以後查閱。

高精度的演算法實現的思想大致為:

①建立乙個結構體,在結構體中定義陣列,將很大的數分成幾個部分裝到這個陣列中。

②之後重構運算子,將兩個數字一一對應的部分相加,並考慮進製的情況。

③定義輸入、輸出函式,將字串陣列輸入並處理到結構體的陣列中。

不過結構體中的細節要考慮一些,畢竟演算法比較嚴謹。

之後我將近期寫的部分**放上來。

求正整數n(n>1)的質因數的個數。 相同的質因數需要重複計算。如120=2*2*2*3*5,共有5個質因數。

可能有多組測試資料,每組測試資料的輸入是乙個正整數n,(1示例1

120

5

#include 

"stdio.h

"#include

"iostream

"using

namespace

std;

int prime[100000

];int flag[100000

];int f=0

;int

init()

for (int j = 2; j < 10000; ++j)

}return0;

}int

main()

count++;

if(n==1) break

; }

}if(n!=1

)int ans=0

;

for (int j = 0; j < count; ++j)

cout

}return0;

}

output the k-th prime number.

k≤10000
the k-th prime number.
示例1

3

7

5

17

//

prime number

#include

"stdio.h

"#include

"iostream

"#include

"math.h

"using

namespace

std;

int prime[100000

];int f=0

;int

init()

for (int j = 2; j <=100000 ; ++j) }}

return0;

}int

main()

return0;

}

這是素數的處理方法,使用預處理先行處理之後就很方便得到了。

輸入兩個正整數,求其最大公約數。

測試資料有多組,每組輸入兩個正整數。
對於每組輸入,請輸出其最大公約數。
示例1

49 14

7
//

最大公約數

#include "

stdio.h

"#include

"iostream

"using

namespace

std;

int init(int a, int

b)

else

}int

main()

}

輸入乙個整數,將其轉換成八進位制數輸出。

輸入包括乙個整數n(0<=n<=100000)。
可能有多組測試資料,對於每組資料,

輸出n的八進位制表示數。

示例1

7

89

7

1011

//

八進位制#include

"stdio.h

"#include

"iostream

"using

namespace

std;

intmain()

for (int i = flag-1; i >=0 ; i--)

cout

<}

}

這是進製轉換型別的題目,這種題目比較基礎,但是考的也挺多。

所以下面我放上去通用的題目,輸入任意進製 轉化為任意進製。

例如:15 aab3 7

將15進製轉換為7進製並輸出。

//

數值轉換

#include

"iostream

"#include

"string.h

"#include

"stdio.h

"using

namespace

std;

intmain()

if(input[i]>='

a'&&input[i]<='z'

)

if(input[i]>='

a'&&input[i]<='z'

) ans+=x*first;

first=first*n;

}char output[100

];

int flag=0

;

do

else

flag ++;

ans/=m;

}while

(ans);

for (int j = flag-1; j >=0 ; j--)

cout

<}

}

輸入兩個不超過整型定義的非負10進製整數a和b(<=231-1),輸出a+b的m (1 < m <10)進製數。

輸入格式:測試輸入包含若干測試用例。每個測試用例佔一行,給出m和a,b的值。

當m為0時輸入結束。

輸出格式:每個測試用例的輸出佔一行,輸出a+b的m進製數。
示例1

8 1300 48

2 1 7

0

2504

1000

//

//created by 陳平 on 2018/4/22.

//又一板 a+b

#include "

stdio.h

"#include

"iostream

"#include

"math.h

"using

namespace

std;

long

long

a,b;

int mfunction(int m, long

long

a)

for (int i = flag-1; i >=0 ; i--)

cout

}int

main()

return0;

}

C 學習之路 day6

day6知識點 1.在運算子過載時盡量遵循原有預設的規則,如以下 int a b c a b c 是錯誤的 而在運算子過載中 complex complex operator complex another complex c1 1,2 c2 2,3 c1 c2 c 是正確的,但不遵循預設語法規則 ...

Python學習日記day6

字串型別及操作 知識點1 使用 m n k 根據步長對字串切片 m缺失表示至開頭,n缺失表示至結尾。k為步長,擷取的字串位置為m到n 1 知識點2 轉義符號 轉義符號後的字元為原始字元 知識點3 字串操作符 x y 連線兩個字串x和y n x 或 x n 複製n次字串x x in s 如果x是s的子...

JAVA學習筆記Day6

型別相同,個數不同時構成可變引數。列 private static int sumup int.values 1 氣泡排序 相鄰的兩個數比較大小並按規律調換位置,值到確定從數值依次從小到大。2 選擇排序 確定乙個位置最大或最小,然後分別用其餘的數與當前確定位置的數進行比較,如果想拿到從大到小,那麼每...