簡體   English   中英

如何讀取大量數字?

[英]How read large amount of numbers?

我需要在C / C ++中讀取大量(最多2 ^ 24)個大數字(每個最大22個字符)。 如何進行這樣的閱讀? 數字之間用空格分隔,我必須全部閱讀直到換行。 使用getch()並填充數組還是有一些更聰明的解決方案?

這些“數字”是什么? 如果它們是整數,那么在C中通常不支持如此大的數字。 您將需要一些庫來支持“ bignum”。 如果它們是浮點數,則可以嘗試double但精度可能不夠。

在不了解更多數據的情況下很難做到更具體,請考慮顯示問題中的一些數字,否則會非常模糊。

如果您的讀取是單線程的,則可以使用getchar_unlocked() ,這避免了為每個操作鎖定流的開銷。 逐個字符,累積數字,然后等待空格。 當看到空格時,保存數字,然后將當前值清零:

int *data = new int[MAX_LEN];
int *ptr = data;
int ch;
*ptr = 0;
while ((ch = getchar_unlocked()) != '\n') {
    if (ch == ' ') {
        ptr++;
        *ptr = 0;
    } else {
        *ptr = (*ptr *10) + (ch -'0');
    }
}

當然,該片段會忽略諸如錯誤檢查之類的“無關緊要”的內容,但是當您的輸入經過“清理”時就可以了。 例如,可以使用ACM在線判斷器來節省I / O成本。

首先,您需要一個適當的類型來存儲整數,因為它大於64位int,因此可能需要結構化類型。 您可以編寫自己的庫或使用庫,例如

http://gmplib.org/

閱讀其文檔以供使用。

然后,您需要弄清楚數字的用途:總結,轉換,搜索或轉移? 一旦知道,就可以對用於整數的數據類型進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM