UVa11809 - Floating-Point Numbers

題目

UVa11809

解讀

其實(shí)這題是一題數(shù)學(xué)題摩钙,核心是電腦儲(chǔ)存浮點(diǎn)數(shù)的方式。
從我們的科學(xué)記數(shù)法說(shuō)起坯钦。對(duì)于任意一個(gè)實(shí)數(shù)(十進(jìn)制),都可以用A*10^B 來(lái)表示侈玄。但是電腦只能用二進(jìn)制來(lái)儲(chǔ)存東西(0,1)吟温,所以在計(jì)算機(jī)就變成了m*2^e序仙。m我們稱(chēng)之為尾數(shù),e稱(chēng)之為階碼鲁豪。同時(shí)我們也就得到等式:

A*10^B = m*2^e

但還沒(méi)完潘悼,就這樣還遠(yuǎn)遠(yuǎn)不夠。
下面先求對(duì)于位數(shù)下 me 的最大值
對(duì)于小數(shù)爬橡,10進(jìn)制可以用 a1*10^(-1) + a2*10^(-2) + ... + an*10^(-n)的方式表示治唤。2進(jìn)制的情況顯然相似(對(duì)于用 i 位進(jìn)行儲(chǔ)存):

m = 2^(-1) + 2^(-2) + ... + 2^(-1 - i)
= 1 - 2^(-1 - i)

e 則好辦多了:

e = 2^j - 1

題目給出了0 ≤ M ≤ 9,1 ≤ E ≤ 30(M糙申,E分別為尾數(shù)和階碼的位數(shù))宾添,所以最多共有300種表示方法,進(jìn)而聯(lián)想到打表柜裸。用兩個(gè)二維數(shù)組缕陕,分別儲(chǔ)存對(duì)應(yīng)位數(shù)時(shí)的尾數(shù)和階碼的最大值,分別記為M[i][j]和E[i][j]疙挺。

然后接下來(lái)到計(jì)算對(duì)應(yīng) M 和 E 的值扛邑。還記得剛剛的等式嗎?對(duì)铐然,我們需要借助那個(gè)蔬崩。對(duì)兩邊取十為底的對(duì)數(shù)lg:

lg(A) + B = lg(m) + e*lg(2) = t

由于A小于10,所以lg(A)就是 t 的小數(shù)部分搀暑,自然 B 就是 t 的整數(shù)部分沥阳。
所以,我們的 E[i][j] 只需在計(jì)算出 t 之后取整即可险掀。M[i][j] 則為:

10^( t - E[i][j] )

即可沪袭。(取10的冪是為了方便與A比較,就無(wú)需計(jì)算lg(A)了 )

搞定了M和E樟氢,就到讀入 AB 了冈绊。
因?yàn)檩斎氲母袷且粋€(gè)字符串,所以考慮先當(dāng)成字符串儲(chǔ)存再進(jìn)行處理埠啃。觀(guān)察結(jié)構(gòu)可以把e換成空格死宣,然后用函數(shù)sscanf()進(jìn)行輸入。

最后進(jìn)行遍歷匹配即可碴开。不過(guò)因?yàn)楦↑c(diǎn)數(shù)自身精確度的問(wèn)題毅该,會(huì)存在誤差博秫,所以還需設(shè)一個(gè)誤差范圍。此題誤差設(shè)為 1e-4 效果最好眶掌。

代碼

#include <stdio.h>
#include <math.h>
#include <string.h>

//多層循環(huán)用函數(shù)更容易跳出
void solve(double m, int e);
double M[12][33];   //儲(chǔ)存尾數(shù)表
long long E[12][33];  //儲(chǔ)存階數(shù)表

int main() {
#ifdef TEST
    freopen("test.in", "r", stdin);
    freopen("test.out", "w", stdout);
#endif // TEST

    //打表
    int i, j;
    char str[25];
    for (i = 0; i <= 9; ++i) for (j = 1; j <= 30; ++j) {
        double m = 1 - pow(2, -1 - i), e = pow(2, j) - 1;
        double t = log10(m) + e * log10(2);
        E[i][j] = t, M[i][j] = pow(10, t - E[i][j]);
    }

    //讀入處理
    while (scanf("%s", str) == 1 && strcmp(str, "0e0")) {
        double A; int B;
        * (strchr(str, 'e')) = ' ';
        sscanf(str, "%lf %d", &A, &B);
        while (A < 1) A *= 10, B -= 1;
        solve(A, B);
    }

    return 0;
}

void solve(double m, int e) {
    for (int i = 0; i <= 9; i++)
        for (int j = 1; j <= 30; j++)
            if (e == E[i][j] && (fabs(m - M[i][j]) < 1e-4 || fabs(m / 10 - M[i][j]) < 1e-4)) {
                printf("%d %d\n", i, j);
                return;
            }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末挡育,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子朴爬,更是在濱河造成了極大的恐慌即寒,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件召噩,死亡現(xiàn)場(chǎng)離奇詭異母赵,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)具滴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)凹嘲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人构韵,你說(shuō)我怎么就攤上這事周蹭。” “怎么了疲恢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵谷醉,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我冈闭,道長(zhǎng)俱尼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任萎攒,我火速辦了婚禮遇八,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耍休。我一直安慰自己刃永,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布羊精。 她就那樣靜靜地躺著斯够,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喧锦。 梳的紋絲不亂的頭發(fā)上读规,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音燃少,去河邊找鬼束亏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛阵具,可吹牛的內(nèi)容都是我干的碍遍。 我是一名探鬼主播定铜,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怕敬!你這毒婦竟也來(lái)了揣炕?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤东跪,失蹤者是張志新(化名)和其女友劉穎祝沸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體越庇,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年奉狈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卤唉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仁期,死狀恐怖桑驱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跛蛋,我是刑警寧澤熬的,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站赊级,受9級(jí)特大地震影響押框,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜理逊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一橡伞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晋被,春花似錦兑徘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至欲侮,卻和暖如春崭闲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背威蕉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工镀脂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忘伞。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓薄翅,卻偏偏與公主長(zhǎng)得像沙兰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翘魄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容