欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:r語言 R 格式(藍橋杯)

柚子快報激活碼778899分享:r語言 R 格式(藍橋杯)

http://yzkb.51969.com/

文章目錄

R 格式【問題描述】解題思路高精度乘法+高精度加法

R 格式

【問題描述】

小藍最近在研究一種浮點數(shù)的表示方法:R 格式。對于一個大于 0 的浮點數(shù) d,可以用 R 格式的整數(shù)來表示。給定一個轉(zhuǎn)換參數(shù) n,將浮點數(shù)轉(zhuǎn)換為 R格式整數(shù)的做法是:

將浮點數(shù)乘以 2n;四舍五入到最接近的整數(shù)。

【輸入格式】 一行輸入一個整數(shù) n 和一個浮點數(shù) d,分別表示轉(zhuǎn)換參數(shù),和待轉(zhuǎn)換的浮點數(shù)。 【輸出格式】 輸出一行表示答案:d 用 R 格式表示出來的值。 【樣例輸入】

2 3.14

【樣例輸出】

13

【樣例說明】 3.14 × 22 = 12.56,四舍五入后為 13。

【評測用例規(guī)模與約定】 對于 50% 的評測用例:1 ≤ n ≤ 10,1 ≤ 將 d 視為字符串時的長度 ≤ 15。 對于 100% 的評測用例:1 ≤ n ≤ 1000,1 ≤ 將 d 視為字符串時的長度≤ 1024;保證 d 是小數(shù),即包含小數(shù)點。

解題思路

題意分析:

將浮點數(shù)乘以 2n;四舍五入到最接近的整數(shù)。

根據(jù)題意將d * 2n分解為d * 2 * 2 * 2 * 2 * 2……(這里2的n次方不能使用pow函數(shù),當(dāng)n過大,會得不到答案),因為d長度小于等于1024,所以可以使用高精度乘法的算法來實現(xiàn)

然后該如何去乘?這里我先給出結(jié)論: 一個小數(shù)乘以一個大于0的整數(shù)時,小數(shù)點位數(shù)本身不會改變,但小數(shù)點后面的數(shù)字可能會發(fā)生變化。乘法操作并不改變數(shù)字中小數(shù)點的位置,它只是會影響小數(shù)點前后的數(shù)字值。 所以,我們先將小數(shù)看作一個整數(shù)相乘即可,例如:1.05 * 2=105 * 2=210=2.10

四舍五入:最后看小數(shù)點第一位是否大于等于5,如果大于等于5,前一位需要+1,需要注意的是這里可能存在連續(xù)進位,例如9999.5應(yīng)該四舍五入為10000,所以這里因該使用高精度加法的算法

高精度乘法+高精度加法

#include

using namespace std;

// 乘法函數(shù),用于將向量 a 中的每個元素乘以整數(shù) n,并返回結(jié)果向量

vector mul(vector a,int n)

{

vector c; // 結(jié)果向量

int t=0; // 用于累計進位

for(int i=0;i

{

if(i

c.push_back(t%10); // 將乘積的個位數(shù)加入結(jié)果向量

t/=10; // 更新進位

}

return c; // 返回結(jié)果向量

}

// 加法函數(shù),用于將向量 b 的每個元素與整數(shù) n 相加,并返回結(jié)果向量

vector sum(vector b,int n)

{

vector c; // 結(jié)果向量

int t=0; // 用于累計進位

for(int i=0;i

{

t+=b[i]; // 加上當(dāng)前位的值

if(n) t+=n%10; // 如果 n 不為零,則加上 n 的當(dāng)前位

c.push_back(t%10); // 將和的個位數(shù)加入結(jié)果向量

t/=10; // 更新進位

n/=10; // 更新 n,移動到下一位

}

if(t) c.push_back(t); // 如果最后還有進位,加到結(jié)果向量的末尾

return c; // 返回結(jié)果向量

}

int main()

{

int n; // 轉(zhuǎn)換參數(shù) n

string s; // 待轉(zhuǎn)換的浮點數(shù) d 作為字符串

cin>>n>>s; // 從輸入讀取 n 和 s

string t; // 用于存儲去掉小數(shù)點后的數(shù)字字符串

int k=0; // 小數(shù)點后數(shù)字的個數(shù)

// 移除小數(shù)點,并計算 k

for(int i=0;i

{

if(s[i]!='.')

t+=s[i];

else

k=i;

}

k=t.size()-k; // 計算小數(shù)點后的位數(shù)

vector a; // 存儲數(shù)字的向量,每個元素是一位數(shù)字

// 將字符串 t 的數(shù)字轉(zhuǎn)換為向量 a

for(int i=t.size()-1;i>=0;i--)

a.push_back(t[i]-'0');

// 將 a 乘以 2^n

for(int i=1;i<=n;i++)

a=mul(a,2);

reverse(a.begin(),a.end()); // 反轉(zhuǎn)結(jié)果向量,以便從最高位開始處理

int p=a[a.size()-k]; // 獲取可能需要四舍五入的位

if(p>=5) // 如果需要四舍五入

{

vector b;

// 構(gòu)造需要增加 1 的向量 b

for(int i=a.size()-1-k;i>=0;i--)

{

b.push_back(a[i]);

}

b=sum(b,1); // 對 b 加 1

for(int i=b.size()-1;i>=0;i--)

cout<

}

else // 如果不需要四舍五入

{

for(int i=0;i

cout<

}

return 0;

}

代碼大致流程:

讀取輸入的轉(zhuǎn)換參數(shù) n 和浮點數(shù) s。去除 s 中的小數(shù)點,并計算出小數(shù)點后的位數(shù) k。將處理過的數(shù)字轉(zhuǎn)換為一個由單個數(shù)字組成的向量 a,并對其進行 n 次乘以 2 的操作。判斷是否需要進行四舍五入,根據(jù)判斷結(jié)果輸出最終的整數(shù)值。

此代碼通過數(shù)位分離和模擬手算乘法、加法的方式,精確地處理了大數(shù)問題,確保了在面對極大的 n 時仍能正確計算并避免浮點數(shù)精度問題。

柚子快報激活碼778899分享:r語言 R 格式(藍橋杯)

http://yzkb.51969.com/

推薦文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19552520.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄