當前位置:首頁 » 操作系統 » 大數統計演算法

大數統計演算法

發布時間: 2022-05-22 16:05:46

1. 5種常用的統計學方法是什麼

1、大量觀察法

(1)大數統計演算法擴展閱讀

(一)大量觀察法

這是統計活動過程中搜集數據資料階段(即統計調查階段)的基本方法:即要對所研究現象總體中的足夠多數的個體進行觀察和研究,以期認識具有規律性的總體數量特徵。大量觀察法的數理依據是大數定律,大數定律是指雖然每個個體受偶然因素的影響作用不同而在數量上幾存有差異。

但對總體而言可以相互抵消而呈現出穩定的規律性,因此只有對足夠多數的個體進行觀察,觀察值的綜合結果才會趨向穩定,建立在大量觀察法基礎上的數據資料才會給出一般的結論。統計學的各種調查方法都屬於大量觀察法。

(二)、統計分組法

由於所研究現象本身的復雜性、差異性及多層次性,需要我們對所研究現象進行分組或分類研究,以期在同質的基礎上探求不同組或類之間的差異性。統計分組在整個統計活動過程中都佔有重要地位,在統計調查階段可通過統計分組法來搜集不同類的資料,並可使抽樣調查的樣本代表性得以提高(即分層抽樣方式);

在統計整理階段可以通過統計分組法使各種數據資料得到分門別類的加工處理和儲存,並為編制分布數列提供基礎;在統計分析階段則可以通過統計分組法來劃分現象類型、研究總體內在結構、比較不同類或組之間的差異(顯著性檢驗)和分析不同變數之間的相關關系。統計學中的統計分組法有傳統分組法、判別分析法和聚類分析法等。

(三)、綜合指標法

統計研究現象的數量方面的特徵是通過統計綜合指標來反映的。所謂綜合指標,是指用來從總體上反映所研究現象數量特徵和數量關系的范疇及其數值,常見的有總量指標、相對指標,平均指標和標志變異指標等。

綜合指標法在統計學、尤其是社會經濟統計學中佔有十分重要的地位,是描述統計學的核心內容。如何最真實客觀地記錄、描述和反映所研究現象的數量特徵和數量關系,是統計指標理論研究的一大課題。

2. 大數據時代,統計學方法有多大的效果

已上提問是統計學基本概念不清楚:有的學者認為大數學時代統計學過時了;實際上:所為的大數劇就是數劇流大一點而已,並沒有超出統計學描述的范圍;也就是互聯網、計算機、蘋果手機,小朋友啊搖一搖,小姑娘們聊啊聊,帥哥鍵盤敲啊敲,這些信息、資料、圖片向白雲一樣飄啊飄,飄到空間瞬間形成龐大的幾十萬億的數劇雲。最後這些數據流我們用計算機通過統計學專家學者加已整理、分析;這就對統計學家提出了新的挑戰。
統計學是通過搜索、整理、分析、描述數據等手段,以達到推斷所測對象的本質,甚至預測對象未來的一門綜合性科學。其中用到了大量的數學及其它學科的專業知識,它的使用范圍幾乎覆蓋了社會科學和自然科學的各個領域。
統計學統帥一切科學。
「社會統計學與數理統計學的統一理論」作為統計學的最新理論,必將全面提升統計學的分析水平,當然完全達到了挑戰大數劇的水準。統計學在一切學科中(以社會科學與自然科學一級學科為單位)是地位最高的學科。它的地位的崇高在扵:它是現今世界幾乎所有前沿科學進行研究的唯一手段(所謂瞎子摸大象方法),也是西方文明幾百年的台柱子。
而統計學現存的兩大體系社會統計學與數理統計學的爭論至少有100多年的歷史。早期學者認為社會統計學是研究社會科學的,數理統計學是研究自然科學的;中期學者認為社會統計學適合作定性分析,數理統計學則適合作定量分析;近些年來,以美國為代表的發達國家的學者,由於誇大了數理統計的定量分析,誤認為數理統計學可以代替社會統計學。但是這些觀點自始至終未能對兩者作出科學的解釋,一切處在矛盾中,斗爭中、、、、
王見定教授經過30多年的學習和研究,發現了能准確界定社會統計學、數理統計學的方法,並發現了兩者的聯系和區別以及在一定條件下可以相互轉化的關系,完美地解決了這一長期存在於統計學界的最大問題。「社會統計學與數理統計學的統一理論」將對其它科學的發展起到不可估量的作用。

3. 怎樣計算大數階乘 最好有程序。

我在網上找到了一個計算大數階乘位數的演算法,效率相當可觀:

例如1000階乘位數:

log10(1)+log10(2)+···+long10(1000)取整後加1

或者

log(N!)=lnN!/ln10

=(NlnN-N)/ln10

=2565.7

so

N!=10^2565.7

=10^.7*10^2565

=5.01e2565


然後,計算大數階乘,只能靠計算機,用高精度,程序如下:

vara:array[1..10000000]oflongint;

n,i,j,ans,mark:longint;


procerefindmark;

vari:longint;

begin

fori:=10000000downto1do

ifa[i]>0then

begin

mark:=i;

exit;

end;

end;


begin

a[1]:=1;

readln(n);


fori:=2tondo

begin

ans:=0;

mark:=mark+5;

forj:=1tomark+5do

begin

a[j]:=a[j]*i+ans;

ans:=a[j]div10;

a[j]:=a[j]mod10;

end;

end;


findmark;

fori:=markdownto1do

write(a[i]);

writeln;

end.


這里還附上一個可執行文件,輸入n,可以輸出n!



4. c語言如何寫出計算100位大數的演算法

#include"stdio.h"

int getlength(char a[]){
int i=0;
while(a[i])
i++;
return i;
}/*返回字元串的長度*/

int chartoint(char a){
return a-48;
}/*將字元編程整形*/

void creatarray(char a[],char b[]){
printf("請輸入第一個數:");
scanf("%s",a);
printf("請輸入第二個數:");
scanf("%s",b);
}/*創建數組*/

void go(char a[],char b[],int s[]){
int alength=getlength(a);
int blength=getlength(b);
int i=alength-1;
int j=blength-1;
int k;/*s數組下標*/
int slength;
if(alength>blength)
slength=alength;
else
slength=blength;
k=slength;
while(i>=0&&j>=0)
s[k--]=chartoint(a[i--])+chartoint(b[j--]);
while(i>=0)
s[k--]=chartoint(a[i--]);
while(j>=0)
s[k--]=chartoint(b[j--]);
k=slength;
while(k>=2){
if(s[k]>=10){
s[k-1]++;
s[k]-=10;
}
k--;
}
printf("兩數之和為:");
if(s[1]>=10){
s[0]=1;
s[1]-=10;
for(i=0;i<=slength;i++)
printf("%d",s[i]);
}
else{
for(i=1;i<=slength;i++)
printf("%d",s[i]);
}
printf("\n");
}

void main(){
char a[1000],b[1000];
int s[1000];
int lab;
lab1: creatarray(a,b);
go(a,b,s);
printf("請輸入1繼續(想退出按其他數字鍵):");
scanf("%d",&lab);
if(lab==1)
goto lab1;
}

//該程序最高可求1000位數的加法運算(更高位數你可相應設置),對於求減法和乘法也就大同小異了,這里不再贅述,你自己模仿修改一下吧

5. 統計方法有哪些在什麼情況下用什麼方法

1.計量資料的統計方法

分析計量資料的統計分析方法可分為參數檢驗法和非參數檢驗法。

參數檢驗法主要為t檢驗和方差分析(ANOVN,即F檢驗)等,兩組間均數比較時常用t檢驗和u檢驗,兩組以上均數比較時常用方差分析;非參數檢驗法主要包括秩和檢驗等。t檢驗可分為單組設計資料的t檢驗、配對設計資料的t檢驗和成組設計資料的t檢驗;當兩個小樣本比較時要求兩總體分布為正態分布且方差齊性,若不能滿足以上要求,宜用t 檢驗或非參數方法(秩和檢驗)。方差分析可用於兩個以上樣本均數的比較,應用該方法時,要求各個樣本是相互獨立的隨機樣本,各樣本來自正態總體且各處理組總體方差齊性。根據設計類型不同,方差分析中又包含了多種不同的方法。對於定量資料,應根據所採用的設計類型、資料所具備的條件和分析目的,選用合適的統計分析方法,不應盲目套用t檢驗和單因素方差分析。

2.計數資料的統計方法

計數資料的統計方法主要針對四格表和R×C表利用檢驗進行分析。 四格表資料:組間比較用

檢驗或u檢驗,若不能滿足 檢驗:當計數資料呈配對設計時,獲得的四格表為配對四格表,其用到的檢驗公式和校正公式可參考書籍。 R×C表可以分為雙向無序,單向有序、雙向有序屬性相同和雙向有序屬性不同四類,不同類的行列表根據其研究目的,其選擇的方法也不一樣。

3.等級資料的統計方法

等級資料(有序變數)是對性質和類別的等級進行分組,再清點每組觀察單位個數所得到的資料。在臨床醫學資料中,常遇到一些定性指標,如臨床療效的評價、疾病的臨床分期、病症嚴重程度的臨床分級等,對這些指標常採用分成若干個等級然後分類計數的辦法來解決它的量化問題,這樣的資料統計上稱為等級資料。

6. C語言 實現大數的計算

/*關於任意精度大數的高精度求冪運算 在以前的文章中看到介紹一種演算法,就是使用10000進製法,用數組來存儲數據。 原理如下: 先說計數方法: 十進制和其他進制都是用權和數字(好象這里名詞不對,記不清楚了)來計數的: 比如 num=123456790 這個數的大小就是: 0*10^0+9*10^1+7*10^2+...+1*10^8 我們可以這樣來寫這個數: 123 456 790 令a=123,b=456,c=790 那麼,abc看起來就象和123456790是一樣的 看到這里你明白了吧? 我們可以分段表示一個非常大的數而不必考慮它的溢出, 而只用考慮段數是否大於一個數即可 舉個例子: 上邊,a的最大值是999,bc也同樣都是,我們只用保證這三個數不溢出 那麼,num就不會溢出 再一個乘法. 我們老祖宗給我們留下的算盤,很妙, 它其實就是最基本的計算機之一 我們算乘方時, 只用乘以一個數: 這樣來列式子: 123456790 *2= -------------- 246913580 即: 123 456 790 *2= *2= *2= ----- ----- ------ 246 912 (1)580(溢出) 第三段有溢出,加到上一段 ----- ----- -------- 246 913 580 呵呵,就這樣,打算盤一樣,進位. 至此,我們已經將需要計算的溢出和乘方計算問題解決了,只用看代碼了: 程序用一個含有1024個無符號整數(上限65536)的數組來存放各段數據 每一個數是一段,每一個數據可以表示9999這么大的數(便於進位) 計算一次,檢查是否超過9999,如果超過,把這一段減去10000, 然後向上一個位(即上一個數)進1(這可以稱為 "一萬進制 ") 程序可以計算小於2的13605次方,大於0次方的任意的二的乘方 其實這樣算起來一點也沒有必要,不過,我覺得好玩,過癮. 另外,藉助對數,可以很輕松的算出這些來, 相比之下,本程序無任何誤差而已 我稱這個演算法為 " '一萬進制 '算盤法 ": */ #include "stdio.h " int main(void) { static unsigned int temp[1024];/*分段儲存數據*/ unsigned int position=1;/*記錄共有幾段*/ int overflow=0; /*記錄在算每一段時是否溢出*/ long times=10000,tm_cnt,sgn_cnt;/*默認10000次計算,可以更改,兩個計數器(乘方次數,段的位置)*/ temp[0]=2;/*初始值為2*/ if(times> 13000) { printf( "your input is too large ");/*檢查輸入是否越界*/ exit(0); } /*開始計算,外層為乘方次數,內層為每一位計算*/ for(tm_cnt=0;tm_cnt <times-1;tm_cnt++) { for(sgn_cnt=0;sgn_cnt <position;sgn_cnt++) { temp[sgn_cnt] < <=1;/*相當於乘2*/ if(overflow==1) /*檢查上次是否有溢出*/ { /*有的話,將溢出加到這一段,同時置溢出為0*/ ++temp[sgn_cnt]; overflow=0; } if(temp[sgn_cnt]> 9999) { /*檢查本次是否溢出,溢出的話,*/ temp[sgn_cnt]-=10000; overflow=1; } } if(overflow==1) { ++position; ++temp[sgn_cnt]; overflow=0; } if(position> 1023) { printf( "times: %d error! ",tm_cnt); exit(1); } } printf( "%d ",temp[sgn_cnt-1]); for(sgn_cnt=position-2;sgn_cnt> =0;sgn_cnt--) { if(temp[sgn_cnt] <1000) printf( "0 "); if(temp[sgn_cnt] <100) printf( "0 "); if(temp[sgn_cnt] <10) printf( "0 "); printf( "%d ",temp[sgn_cnt]); if((sgn_cnt+1)%15==0) printf( "\n "); } return 0; } 2的1000次方: 199 5063 1168 8075 8384 8837 4216 2683 5850 8382 3496 8318 8619 2454 8520 0894 9852 9438 8302 2194 6631 9199 6168 4036 1945 9789 9331 1294 2320 9124 2715 5649 1349 4137 8111 7593 7859 3209 6323 9578 5573 0046 7937 9452 6765 2465 5126 6059 8955 2055 0086 9181 9331 1542 5086 0846 0618 1046 8550 9074 8660 8962 4888 0904 8989 4838 0092 5394 1633 2578 5062 1568 3094 7390 2556 9123 8806 5225 0966 4387 4441 0467 5987 1626 9854 5322 2868 5381 6169 4315 7756 2964 0762 8368 8076 0732 2285 3509 1641 4761 8395 6381 4589 6946 3899 4108 4096 0536 2678 2106 4621 4273 3339 4036 5255 6564 9530 6031 4268 0234 9694 0033 5934 3166 5145 9297 7732 7966 5775 6061 7258 2031 4079 9419 8179 6073 7824 5683 7622 8003 7302 8854 8725 1900 8344 6458 1454 6505 5792 9601 4148 3392 1615 7345 8813 9257 0953 7976 9119 2778 0082 6957 7356 7444 4123 0620 1875 7836 3255 0272 8323 7892 7071 0373 8028 6639 3031 4281 3324 1401 6241 9567 1690 5740 6141 9654 3423 2463 8801 2488 5614 7305 2074 3199 2259 6117 9625 0130 9928 6024 1708 3408 0760 5932 3201 6126 8492 2884 9625 5841 3128 4406 1536 7389 5148 7114 2563 1511 1089 7455 1420 3313 8202 0293 1640 9575 9646 4756 0104 0584 5841 5660 7204 4962 8670 1651 5061 9206 3100 4186 4222 7590 8670 9005 7460 6417 8569 5191 1456 0550 6825 1250 4060 0751 9842 2618 9805 9237 1180 5444 4788 0729 0639 5242 5483 3922 1982 7074 0447 3162 3767 6084 6613 0337 7870 6039 8034 1319 7133 4936 5462 2700 5631 6993 7455 5082 4178 0972 8109 8329 1314 4035 7187 7524 7685 0985 7276 9379 2643 3221 5993 9987 6886 6608 0836 8837 8380 2764 3282 7751 7227 3657 5727 4478 4112 2943 8973 3810 8616 0742 3253 2919 7481 3120 1976 0417 8281 9656 9747 5898 1645 3125 8434 1359 5986 2784 1301 2818 5406 2834 7664 9088 6905 2104 7580 8826 1582 3961 9857 7012 2407 0443 3058 3075 8690 3931 9604 6034 0497 3156 5832 0867 2105 9133 0090 3752 8234 1553 9745 3943 9771 5257 4552 9051 0212 3109 4732 1610 7534 7482 5740 7752 7398 6348 2984 9834 0756 9379 5564 6638 6218 7456 9499 2790 1657 2103 7013 6443 3135 8172 1431 1791 3982 2298 3845 8473 3444 0270 9641 8285 1005 0729 2774 8364 5505 7863 4501 1008 5298 7812 3894 7392 8699 5408 3434 6158 8070 4395 9118 9858 1514 5779 1771 4361 9698 7281 3145 9483 7832 0208 1474 9821 7185 8011 3890 7122 8250 9058 2681 7436 2205 7747 5921 4176 5371 5687 7256 1490 4582 9049 9246 1028 6300 8153 5583 3081 3010 1987 6758 5623 4343 5389 5540 9175 6234 0084 4887 6264 3568 6488 3351 9463 7203 7729 3240 0944 5624 6923 2543 5040 0678 0272 7383 7755 3764 0672 6898 6362 4103 7491 4109 6671 8557 0507 5909 8100 2467 8988 0178 2719 2595 3381 2824 2195 4028 3027 5940 8448 9550 1467 6668 3896 9799 6886 2416 3631 3376 3939 0337 3455 8014 0763 6741 8777 1105 5384 2257 3949 9110 1864 6821 9696 5816 5148 5130 4942 2236 9947 7147 6306 9155 4682 1768 2876 2003 6277 7257 7237 8136 5331 6111 9681 1280 7926 6948 1887 2012 9864 3660 7685 5163 9860 5346 0229 7871 5575 1794 7385 2463 6944 6923 0878 9426 5948 2170 0805 1120 3223 6549 6288 1690 3573 9121 3683 3839 3591 7564 1873 3850 5109 7027 1613 9154 3959 0991 5981 5465 4417 3363 1165 6936 0311 2224 9937 9699 9922 6781 7323 5802 3111 8626 4457 5299 1357 5817 5008 1998 3923 6284 6152 4988 1088 9602 3224 4362 1737 7161 8086 3570 1546 8484 0586 2232 9792 8538 7562 3486 5564 4053 6962 6220 1896 3571 0288 1236 1567 5125 4333 8303 2700 2909 7668 6505 6855 7157 5055 1672 7518 8991 9412 9711 3376 9014 9916 1813 1517 1544 0077 2865 0573 1895 5745 0920 3301 8530 4847 1138 1831 5407 3240 5331 9038 4620 8403 6421 7637 0391 1550 6397 8900 0742 8536 7219 6280 9034 7797 4533 3204 6836 8795 8685 8023 7952 2186 2912 0080 7428 1955 1317 9481 5762 4448 2985 1846 1509 7048 8802 7274 7215 7468 8131 5947 5040 9732 1150 8049 8190 4558 0341 6826 9497 8714 1316 0632 1068 6391 5116 8177 4304 7925 9670 9376

7. 大數乘法 用什麼演算法啊

大數乘法基本上是乘法豎式筆算的代碼化。
基本功能有3個
1.
大數的數組表示。
2.
大數乘以小數,得到大數。
3.
大數加大數,得到大數。
對於1,其實就是int數組的每個元素存儲若干位。比如每個元素保存4個十進制位。[0]存儲個十百千,[1]存儲萬、十萬、百萬、千萬,諸如此類。一個數組保存一個大數。因此需要一個額外的int變數記錄當前數組用了多少個元素(類似於字元串長度)。
對於2,「小數」指的是能用一個int保存的數。注意這里只限4個二進制位(和1里提到的位數一致)。
比如1
2345
6789這個數字,[0]保存6789,[1]保存2345,[2]保存1。長度3。
這個大數乘以小數,比如9999,過程就是[0]
*
9999,即6789
*
9999
=
6788
3211,積的低四位(%10000)3211保存到積(大數)的[0],剩下6788的進位到[1]。
然後2345
*
9999
= 2344
7655,加上剛才進位上來的6788得到2345
4443,其中4443保存到積(大數)的[1]中,2345進位到[2]。
以此類推。
對於3,基本只要一個for,對位相加然後注意進位就行了。
大數乘以大數,其實就是第一個大數先乘以第二個大數的[0](大數乘小數,上面的2),得到一個大數a0;然後第一個大數乘以第二個大數的[1],又得到一個大數a1……最後再將a0、a1、……加起來(也就是大數加法,上面的3)。加的時候要注意,a1的[0]要和a0的[1]對齊,a2的[0]要和a1的[1]和a0的[2]對齊……這個也和我們豎式筆算一樣。
ps:上面的演算法基本上是「10000進制數」的計算方式。如果數組的每個元素只保存1個十進制位,那就是10進制數。之所以用10000進制,純粹是程序員感覺上好一些。最有效的利用,是每個int保存2的15次方,也就是32768進制。要注意到,如果用10進制計算的話,程序的計算耗時會變成10000進制的16倍,也就是效率變成1/16。
ps2:用int數組的話,位數最多隻能是4位。因為5位數相乘可能得到11位數,超出了int表示範圍。

8. c語言,大數運算的演算法,哈,不要代碼,只要思路就ok,代碼我自己能搞定,萬分感謝,好的思路加分..

大數運算的方法有點繁雜。他是模擬小學生做加減乘除運算的想想你小學時是如何進行計算的吧,就是一位一位的加(或減法,乘法,除法我至今沒有寫過。。)換句話說,高精度演算法就是把,做運算的兩個數先用字元串存起來,用一個數組來代表一個數。對於每一位按位做運算。(和小學生一樣)我很久以前寫過這種程序:給你看下運行框圖吧,免得你說我騙你。。(加法的運行框圖,各種情況(前導零),都考慮了的) 既然你要求不要我貼代碼,那我就不貼了。但是你如果看不懂的話,可以繼續追問。或者加我蔻蔻:五一零六八五二六三

9. c語言大數演算法

#include<iostream>
#include<string>
using namespace std;
//////加法
void addtion(string str1,string str2)
{
int n1=str1.size(),n2=str2.size();
int i,d,e;
e=0;
for(i=0;i<n1;i++)
{
if(i<n2)
{
d=str1[n1-1-i]-'0'+str2[n2-i-1]-'0'+e;
e=d/10;
str1[n1-1-i]=d%10+'0';
}
else
{
d=str1[n1-1-i]-'0'+e;
e=d/10;
str1[n1-1-i]=d%10+'0';
}
}
if(e!=0) cout<<e;
cout<<str1<<endl;
}
//////////減法
void subtration(string str1,string str2)
{
int n1=str1.size(),n2=str2.size();
int i,t,k;
for(i=0;i<n2;i++)
{
if(str1[n1-1-i]<str2[n2-1-i])
{
for(k=n1-i-2;k>=0;k--)
if(str1[k]!='0') {t=k;break;}
str1[t]=str1[t]-1;
for(k=t+1;k<=n1-2-i;k++)
str1[k]=str1[k]+9;
str1[n1-1-i]=str1[n1-1-i]+10-str2[n2-1-i]+'0';
}
else
{
str1[n1-1-i]=str1[n1-1-i]-str2[n2-1-i]+'0';
}
}
t=-1;
for(i=0;i<n1;i++)
if(str1!='0') {t=i;break;}
if(t==-1) cout<<'0'<<endl;
else
{
for(i=t;i<n1;i++)
cout<<str1;
cout<<endl;
}
}
///////////////////乘法
void multiplication(string str1,string str2)
{
char a[100],b[100];
int n1,n2,i,j,k,d,e,m;
n1=str1.size();
n2=str2.size();
for(i=0;i<100;i++)
a='0',b='0';
for(i=0;i<n2;i++)
{
e=0;
for(j=0;j<n1;j++)
{
d=(str1[n1-1-j]-'0')*(str2[n2-1-i]-'0')+e;
e=d/10;
b[j]=d%10+'0';
}
m=j;
if(e!=0)
{b[n1]=e+'0';m=m+1;}
e=0;
for(k=0;k<m;k++)
{
d=(a[k+i]-'0')+(b[k]-'0')+e;
e=d/10;
a[k+i]=d%10+'0';
}
for(k=m;e!=0;k++)
{
d=(a[k+i]-'0')+e;
e=d/10;
a[k+i]=d%10+'0';
}
}
for(i=99;i>=0;i--)
if(a!='0') {m=i;break;}
for(i=m;i>=0;i--)
cout<<a;
cout<<endl;
}
int main()
{
string str1,str2;
int n1,n2;
char c;
while(cout<<"輸入運算符與數字:"<<endl,cin>>c>>str1>>str2)
{
n1=str1.size();
n2=str2.size();
switch(c)
{
case '+': if(n1<n2) addtion(str2,str1);else addtion(str1,str2);break;
case '-':
if((n1<n2)||(n1==n2&&str2>str1)) {cout<<'-';subtration(str2,str1);}
else subtration(str1,str2);break;
case '*':
if(n1<n2) multiplication(str2,str1);
else multiplication(str1,str2);
break;
default:cout<<"輸入錯誤"<<endl;
}
}
return 0;
}

10. C語言中如何實現大數計算

/*關於任意精度大數的高精度求冪運算

在以前的文章中看到介紹一種演算法,就是使用10000進製法,用數組來存儲數據。
原理如下:
先說計數方法:
十進制和其他進制都是用權和數字(好象這里名詞不對,記不清楚了)來計數的:
比如

num=123456790
這個數的大小就是:
0*10^0+9*10^1+7*10^2+...+1*10^8
我們可以這樣來寫這個數:
123 456 790
令a=123,b=456,c=790
那麼,abc看起來就象和123456790是一樣的

看到這里你明白了吧?
我們可以分段表示一個非常大的數而不必考慮它的溢出,
而只用考慮段數是否大於一個數即可
舉個例子:
上邊,a的最大值是999,bc也同樣都是,我們只用保證這三個數不溢出
那麼,num就不會溢出

再一個乘法.

我們老祖宗給我們留下的算盤,很妙,
它其實就是最基本的計算機之一

我們算乘方時,
只用乘以一個數:
這樣來列式子:
123456790
*2=
--------------
246913580

即:
123 456 790
*2= *2= *2=
----- ----- ------
246 912 (1)580(溢出) 第三段有溢出,加到上一段
----- ----- --------
246 913 580

呵呵,就這樣,打算盤一樣,進位.

至此,我們已經將需要計算的溢出和乘方計算問題解決了,只用看代碼了:
程序用一個含有1024個無符號整數(上限65536)的數組來存放各段數據
每一個數是一段,每一個數據可以表示9999這么大的數(便於進位)
計算一次,檢查是否超過9999,如果超過,把這一段減去10000,
然後向上一個位(即上一個數)進1(這可以稱為 "一萬進制 ")
程序可以計算小於2的13605次方,大於0次方的任意的二的乘方

其實這樣算起來一點也沒有必要,不過,我覺得好玩,過癮.
另外,藉助對數,可以很輕松的算出這些來,
相比之下,本程序無任何誤差而已

我稱這個演算法為 " '一萬進制 '算盤法 ":

*/
#include "stdio.h "
int main(void)
{
static unsigned int temp[1024];/*分段儲存數據*/
unsigned int position=1;/*記錄共有幾段*/
int overflow=0; /*記錄在算每一段時是否溢出*/
long
times=10000,tm_cnt,sgn_cnt;/*默認10000次計算,可以更改,兩個計數器(乘方次數,段的位置)*/
temp[0]=2;/*初始值為2*/
if(times> 13000)
{
printf( "your input is too large ");/*檢查輸入是否越界*/
exit(0);
}
/*開始計算,外層為乘方次數,內層為每一位計算*/
for(tm_cnt=0;tm_cnt <times-1;tm_cnt++)
{
for(sgn_cnt=0;sgn_cnt <position;sgn_cnt++)
{

temp[sgn_cnt] < <=1;/*相當於乘2*/
if(overflow==1) /*檢查上次是否有溢出*/
{
/*有的話,將溢出加到這一段,同時置溢出為0*/
++temp[sgn_cnt];
overflow=0;
}

if(temp[sgn_cnt]> 9999)
{
/*檢查本次是否溢出,溢出的話,*/
temp[sgn_cnt]-=10000;
overflow=1;
}

}
if(overflow==1)
{
++position;
++temp[sgn_cnt];
overflow=0;
}
if(position> 1023)
{

printf( "times: %d error! ",tm_cnt);
exit(1);
}
}

printf( "%d ",temp[sgn_cnt-1]);
for(sgn_cnt=position-2;sgn_cnt> =0;sgn_cnt--)
{
if(temp[sgn_cnt] <1000)
printf( "0 ");
if(temp[sgn_cnt] <100)
printf( "0 ");
if(temp[sgn_cnt] <10)
printf( "0 ");
printf( "%d ",temp[sgn_cnt]);
if((sgn_cnt+1)%15==0)
printf( "\n ");
}
return 0;
}

2的1000次方:
199 5063 1168 8075
8384 8837 4216 2683 5850 8382 3496 8318 8619 2454 8520 0894 9852 9438 8302
2194 6631 9199 6168 4036 1945 9789 9331 1294 2320 9124 2715 5649 1349 4137
8111 7593 7859 3209 6323 9578 5573 0046 7937 9452 6765 2465 5126 6059 8955
2055 0086 9181 9331 1542 5086 0846 0618 1046 8550 9074 8660 8962 4888 0904
8989 4838 0092 5394 1633 2578 5062 1568 3094 7390 2556 9123 8806 5225 0966
4387 4441 0467 5987 1626 9854 5322 2868 5381 6169 4315 7756 2964 0762 8368
8076 0732 2285 3509 1641 4761 8395 6381 4589 6946 3899 4108 4096 0536 2678
2106 4621 4273 3339 4036 5255 6564 9530 6031 4268 0234 9694 0033 5934 3166
5145 9297 7732 7966 5775 6061 7258 2031 4079 9419 8179 6073 7824 5683 7622
8003 7302 8854 8725 1900 8344 6458 1454 6505 5792 9601 4148 3392 1615 7345
8813 9257 0953 7976 9119 2778 0082 6957 7356 7444 4123 0620 1875 7836 3255
0272 8323 7892 7071 0373 8028 6639 3031 4281 3324 1401 6241 9567 1690 5740
6141 9654 3423 2463 8801 2488 5614 7305 2074 3199 2259 6117 9625 0130 9928
6024 1708 3408 0760 5932 3201 6126 8492 2884 9625 5841 3128 4406 1536 7389
5148 7114 2563 1511 1089 7455 1420 3313 8202 0293 1640 9575 9646 4756 0104
0584 5841 5660 7204 4962 8670 1651 5061 9206 3100 4186 4222 7590 8670 9005
7460 6417 8569 5191 1456 0550 6825 1250 4060 0751 9842 2618 9805 9237 1180
5444 4788 0729 0639 5242 5483 3922 1982 7074 0447 3162 3767 6084 6613 0337
7870 6039 8034 1319 7133 4936 5462 2700 5631 6993 7455 5082 4178 0972 8109
8329 1314 4035 7187 7524 7685 0985 7276 9379 2643 3221 5993 9987 6886 6608
0836 8837 8380 2764 3282 7751 7227 3657 5727 4478 4112 2943 8973 3810 8616
0742 3253 2919 7481 3120 1976 0417 8281 9656 9747 5898 1645 3125 8434 1359
5986 2784 1301 2818 5406 2834 7664 9088 6905 2104 7580 8826 1582 3961 9857
7012 2407 0443 3058 3075 8690 3931 9604 6034 0497 3156 5832 0867 2105 9133
0090 3752 8234 1553 9745 3943 9771 5257 4552 9051 0212 3109 4732 1610 7534
7482 5740 7752 7398 6348 2984 9834 0756 9379 5564 6638 6218 7456 9499 2790
1657 2103 7013 6443 3135 8172 1431 1791 3982 2298 3845 8473 3444 0270 9641
8285 1005 0729 2774 8364 5505 7863 4501 1008 5298 7812 3894 7392 8699 5408
3434 6158 8070 4395 9118 9858 1514 5779 1771 4361 9698 7281 3145 9483 7832
0208 1474 9821 7185 8011 3890 7122 8250 9058 2681 7436 2205 7747 5921 4176
5371 5687 7256 1490 4582 9049 9246 1028 6300 8153 5583 3081 3010 1987 6758
5623 4343 5389 5540 9175 6234 0084 4887 6264 3568 6488 3351 9463 7203
7729 3240 0944 5624 6923 2543 5040 0678 0272 7383 7755 3764 0672 6898 6362
4103 7491 4109 6671 8557 0507 5909 8100 2467 8988 0178 2719 2595 3381 2824
2195 4028 3027 5940 8448 9550 1467 6668 3896 9799 6886 2416 3631 3376 3939
0337 3455 8014 0763 6741 8777 1105 5384 2257 3949 9110 1864 6821 9696 5816
5148 5130 4942 2236 9947 7147 6306 9155 4682 1768 2876 2003 6277 7257 7237
8136 5331 6111 9681 1280 7926 6948 1887 2012 9864 3660 7685 5163 9860 5346
0229 7871 5575 1794 7385 2463 6944 6923 0878 9426 5948 2170 0805 1120 3223
6549 6288 1690 3573 9121 3683 3839 3591 7564 1873 3850 5109 7027 1613 9154
3959 0991 5981 5465 4417 3363 1165 6936 0311 2224 9937 9699 9922 6781 7323
5802 3111 8626 4457 5299 1357 5817 5008 1998 3923 6284 6152 4988 1088 9602
3224 4362 1737 7161 8086 3570 1546 8484 0586 2232 9792 8538 7562 3486 5564
4053 6962 6220 1896 3571 0288 1236 1567 5125 4333 8303 2700 2909 7668 6505
6855 7157 5055 1672 7518 8991 9412 9711 3376 9014 9916 1813 1517 1544 0077
2865 0573 1895 5745 0920 3301 8530 4847 1138 1831 5407 3240 5331 9038 4620
8403 6421 7637 0391 1550 6397 8900 0742 8536 7219 6280 9034 7797 4533 3204
6836 8795 8685 8023 7952 2186 2912 0080 7428 1955 1317 9481 5762 4448 2985
1846 1509 7048 8802 7274 7215 7468 8131 5947 5040 9732 1150 8049 8190 4558
0341 6826 9497 8714 1316 0632 1068 6391 5116 8177 4304 7925 9670 9376

熱點內容
python中string 發布:2022-07-01 12:36:21 瀏覽:746
腳本中的光線 發布:2022-07-01 12:35:19 瀏覽:117
nec編程器 發布:2022-07-01 12:34:54 瀏覽:689
緩存視頻怎麼傳給別人 發布:2022-07-01 12:34:44 瀏覽:906
頁面更新跳轉升級訪問 發布:2022-07-01 12:34:40 瀏覽:808
java方法怎麼寫 發布:2022-07-01 12:33:01 瀏覽:758
安卓手機的imsi碼在哪裡 發布:2022-07-01 12:31:48 瀏覽:729
愛拍原創怎麼上傳視頻 發布:2022-07-01 12:30:15 瀏覽:746
華為平板拍照存儲到內存卡 發布:2022-07-01 12:30:07 瀏覽:382
龍虎榜2安卓版在哪裡下載 發布:2022-07-01 12:28:49 瀏覽:243