導航:首頁 > 網路數據 > c大數據數組比較

c大數據數組比較

發布時間:2023-02-19 12:41:22

❶ c++程序處理大數據問題 正數加減沒問題,負數就出問題..

你先添加一個正負檢驗函數,就是看字元串第一個是不是「-」號,然後如果版是,就相應的執行相權反的函數就行,是加法檢測到「-」號直接調用減法運算,這是一個辦法。如果不行,就添加一個符號記位變數,然後都做相應的結果判定就行了,要不然用別的成程序,我以前寫過一個,後來刪了,比較麻煩,能算加減乘除的,就是乘法特別慢············

❷ C語言用數組存儲大型數據的演算法

樓主一定懂c++吧?c++標准庫裡面有一個模板類叫
bitset<>
專門用來做位操作的。
你的問題用這個可以高效的解決,建立一個足夠大的空間,比如8000個位
bitset<8000>
然後就簡單了,乘法函數把乘數轉化成bitset<32>類型的對象(用乘數直接初始化代表乘數的bitset<32>對象)然後用位運算符把被乘數(那個bitset<8000>類型的對象)按位右移,(一個10進制數右移一次相當於乘10,一個2進制數右移一次相當於乘2;乘數中,二進制位如果知道它是從右數第n位,那麼就把被乘數向右移動n-1位就完成了乘法,然後再做下一個二進制位的乘法,直到被乘數中所有的2進制位都被使用過為止)。做完了每32位2進制位轉化成一個unsigned long,存儲在一個鏈表或者數組(懷疑空間不夠,內存里很有可能沒有這么大的連續空間)中,如果按順序逐個輸出就是問題的結果。
我覺得這個方法比2樓的高效。
如果你不想使用c++標准庫……那也可以考慮用c中的位域,也支持位操作。不過遠沒有前面的方便,很多操作都要自己做,比如最基本的你必須有一個適合乘法操作的動態增長的位域組成的鏈表。而且即使這樣還不一定高效。

……寫完了才看的3樓,3樓就做得很好了。

❸ C/C++大數據處理:10Gtxt資料庫文件

10G 連一次導入內存都不行,而且你說的串除了出現1次沒有其他特徵,只能文件分塊讀入用KMP匹配
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1024*1024*10
int index_KMP(char *s,int n,char *t,int pos);
//利用模式串的t的next函數求t在主串s中的第pos個位置之後的位置的KMP演算法(t非空,1<=pos<=Strlength(s))。

void get_next(char * t,int * next);
//求模式串t的next函數的並存入數組next[]中。
int next[MAX];
int main()
{
char* s= (char*)malloc(MAX+1);
memset(s,0,MAX+1);
char t[256]={0},c;
printf("請輸入檢測字元串,以#號結尾");
int i=0;
while((c=getchar())!='#'&&i<256)
{
t[i++]=c;
}
fflush(stdin);
//strcpy(t,"2014-04-28 18:14:33,333");
get_next(t,next);
FILE* pf = NULL;
if((pf = fopen("1.txt","r"))==NULL){
printf("打不開文件!\n");
return 0;
}
int cur=0,n=0;
unsigned long long pos=0,sum=0;
while(!feof(pf))
{
int len = fread(s,1,MAX,pf);
sum+=len;
printf("讀取第 %5d 次,長度 %5d ,總長:%ld\n",cur+1,len,sum);
n=index_KMP(s,MAX,t,pos);
if(n>0)
{
pos = n+cur*MAX;
break;
}
++cur;
}
fclose(pf);

free(s);
if(n!=0)
printf("\n模式串 t 在主串 s 中第 %ld 個位置之後。\n\n",n);
else
printf("\n主串中不存在與模式串相匹配的子串!\n\n");

}

int index_KMP(char *s,int n,char *t,int pos)
//利用模式串的T的NEXT函數求t在主串s中(長度n)的第pos個位置之後的位置的KMP演算法,(t非空,1<=pos<=Strlength(s)).
{
int i=pos,j=1;
while (i<=n &&j<=(int)strlen(t))
{
if (j==0 || s[i]==t[j-1]) //繼續進行後續字元串的比較
{
i++;
j++;
}

else j=next[j]; //模式串向右移動
}
if (j>(int)strlen(t)) //匹配成功
return i-strlen(t)+1;
else //匹配不成功
return 0;
}

void get_next(char *t,int *next)
//求模式串t的next函數的並存入數組next[]中。
{
int i=1,j=0;
next[0]=next[1]=0;
while (i<(int)strlen(t))
{
if (j==0 || t[i]==t[j])
{
i++;
j++;
next[i]=j;
}
else j=next[j];
}
}
替換文件名,每次讀10M,我測試50M的1S搞定,因為尋找串可能再兩次讀取之間,完美的做法是後一次要把前一次的最後N個字元重新讀取,N為尋找的子串長度,計算長度時需要特殊考慮,我簡略了該種情況

❹ C語言:從鍵盤輸入10個整數存入數組,找出其中最大和最小值,並輸出。 麻煩幫忙編寫一下

#include"stdio.h"

intmain()

inti;

floatmax,min,num[10];

printf("請輸入10個數,每輸入一個數按回車鍵結束:\n");

for(i=0;i<10;i++)

scanf("%f",&num[i]);

max=min=num[0];

for(i=1;i<10;i++)

if(max<num[i])

max=num[i];

elseif(min>num[i])

min=num[i];

printf("最大為:%f\n最小為:%f\n",max,min);

return0;

運行效果:

(4)c大數據數組比較擴展閱讀:

return用法:

在C++的關鍵字,它提供了終止函數執行的一種方式。當return語句提供了一個值時,這個值就成為函數的返回值.

1、C

在C89中,main()是可以接受的。Brian W.Kernighan和Dennis M.Ritchie的經典巨著The C programming Language 2e(《C程序設計語言第二版》)用的就是main()。不過在最新的C99標准中,只有以下兩種定義方式是正確的:

int main(void)

int main(int argc,char*argv[])

當然,我也可以做一點小小的改動。例如:char*argv[]可以寫成char**argv;argv和argc可以改成別的變數名(如intval和charval),不過一定要符合變數的命名規則。

如果不需要從命令行中獲取參數,請用int main(void);否則請用int main(int argc,char*argv[])。

main函數的返回值類型必須是int,這樣返回值才能傳遞給程序的激活者(如操作系統)。

如果main函數的最後沒有寫return語句的話,C99規定編譯器要自動在生成的目標文件中(如exe文件)加入return 0;,表示程序正常退出。不過,我還是建議你最好在main函數的最後加上return語句,雖然沒有這個必要,但這是一個好的習慣。

注意,vc6不會在目標文件中加入return 0;,大概是因為vc6是98年的產品,所以才不支持這個特性。現在明白我為什麼建議你最好加上return語句了吧!不過,gcc3.2(Linux下的C編譯器)會在生成的目標文件中加入return 0;。

2、C++

C++98中定義了如下兩種main函數的定義方式:

int main()

int main(int argc,char*argv[])

int main()等同於C99中的int main(void);int main(int argc,char*argv[])的用法也和C99中定義的一樣。同樣,main函數的返回值類型也必須是int。

如果main函數的末尾沒寫return語句,C++98規定編譯器要自動在生成的目標文件中加入return 0;。同樣,vc6也不支持這個特性,但是g++3.2(Linux下的C++編譯器)支持。

❺ c語言處理文件里的大數據

只能分塊處理了,讀入一塊、處理一塊、存儲一塊,資料庫就是這么乾的。

❻ C語言大數據問題

給你提個思路吧,這種大數據都必須用數組來做的。把數字直接定內義成數組,然後將容轉換規則寫成代碼,而不是直接用取余或取整來做。我給你上傳一個大數加法的代碼,給你些啟發吧。想要代碼可以先採納我,然後我給你寫一個進制轉換的代碼。你這分太少,多些我會直接給你寫個代碼的。

❼ C語言編程題逆序數(大數據)給你一個序列x1,x2,…,xn如果數對< xi,xj >其中i< j而xi> xj,稱為逆序數對

印象中好像是利用歸並排序的性質來做的……(好像)
假設排序a,b,c,d,e,f從小到大排
二分回a,b,c / d,e,f (abc與def已分別排好序答)

主要看前面的a,b,c,有新數組ar[],若最小為d
ar:d
第二小是a則
ar:d,a (這里a跨過了d,表明(a,d)是逆序的)
若:
ar:d,a,b,e,f,
最大是c,表明c跨過了def(5-2,不計ab),說明(c,d),(c,e),(c,f)是逆序
……
其實解題步驟就是歸並排序加上一些判斷與加減法
//註:不知道會不會超時呢

閱讀全文

與c大數據數組比較相關的資料

熱點內容
aspnetmvc代碼 瀏覽:818
怎樣測試網路的穩定性 瀏覽:79
itunes怎麼查看安裝的app 瀏覽:685
驅動式編程是什麼 瀏覽:288
iphone6看片地址 瀏覽:972
網站百度快照導航怎麼變樣子了 瀏覽:792
離線傳輸文件有哪些方法 瀏覽:286
燒程序 瀏覽:9
win10登錄windows賬戶 瀏覽:917
企業收到網路廣告費如何記賬 瀏覽:313
易班app的運營思路是什麼 瀏覽:720
中國藝術微課怎麼下載app 瀏覽:134
軟體內的小說文件在哪裡 瀏覽:200
會議需要准備的文件有哪些 瀏覽:480
升級文件無法讀取或已損壞 瀏覽:889
進料檢驗文件有哪些 瀏覽:495
電腦里的文件被刪除後怎麼找回 瀏覽:295
數車編程軟體哪個好用 瀏覽:579
在qq群里看不見說話 瀏覽:416
靜態網站模板大氣 瀏覽:504

友情鏈接