當前位置:首頁 » 編程語言 » c語言怎樣防止溢出
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言怎樣防止溢出

發布時間: 2023-01-11 06:04:08

『壹』 使用c語言,如何防止輸入整型數據位數為1000的數據溢出

這么長的數據基本上已經超過所有的數據類型了。
我覺得只能按照字元串處理,第一足夠大的字元串數組,然後根據進行存儲

『貳』 為防止溢出,C語言中應該如何定義變數

分類: 電腦/網路 >> 程序設計 >> 其他編程語言
問題描述:

我求的是階乘有LONG是沒用的

解析:

給你個求階乘的小程序,只要最大結果位數不超過20000就行。這種超大規模的階乘是不能用簡單的long保存的。位數太大了。

#define M 20000 /* 最大結果位數,DOS能訪問的內存有限,最好不要超過 30000 位*/

#define N (M+5)

main()

{

int Num;

register int i,j,k,flag;

register unsigned int n,m,pc;

unsigned char str_n[5],result_0[N],result_1[N];

void fun_print_result(char *result,int flag);

int fun_mul(char *a,char *b,char *c,int flag);

printf("輸入計算其階乘的數:Num = ");

scanf("%d",&Num);

if(Num >= 100)

{

printf("\n正在進行階乘運算. . .\n");

printf("已完成 00000 的階乘,請等待. . .");

}

for (j=0;j<N;j++)

{

result_1[j] = 0; result_0[j] = 0;

}

result_1[N-1] = 1;

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

{

str_n[i] = 0;

}

n = 1;

pc = 0; flag = N-1;

while (n <= Num)

{

m = n;

k = 4;

while(m > 0)

{

str_n[k] = m%10; m /= 10; k--;

}

if (pc%2 == 0)

{

if(fun_mul (str_n,result_1,result_0,flag) != 1)

{

printf("\n\n結果溢出!當前所設置的最大結果為 %d 位 已完成 %d 的階乘",M,pc);

exit(0);

}

}

else

{

if(fun_mul (str_n,result_0,result_1,flag) != 1)

{

printf("\n\n結果溢出!當前所設置的最大結果為 %d 位 已完成 %d 的階乘",M,pc);

exit(0);

}

}

flag = flag-(4-k); /* flag 標記相乘後「可能的」第一個有效數字的標號 */

if(pc%2 == 0) /* 再處理一次使 flag 正好標記第一個有效數字的標號 */

{

if(result_0[flag] == 0) flag++;

}

else

{

if(result_1[flag] == 0) flag++;

}

n++; pc++;

if((pc)%25 == 0 && Num >= 100 && pc >= 100)

{

printf("\r已完成 %5d",pc);

}

}

if(Num >= 100) printf("\n");

if ((pc-1)%2 == 0)

{

fun_print_result (result_0,flag);

}

else

{

fun_print_result (result_1,flag);

}

}

int fun_mul(char *a,char *b,char *c,int flag) /* 相乘函數 */

{

register int i,j;

for(j=flag;j<N;j++) c[j]=0;

for(i=4;i>=0;i--)

{

if(a)

{

for (j=N-1;j>=flag;j--)

{

if(b[j])

{

c[i+j-4] += a[i]*b[j];

}

if(c[i+j-4] > 9)

{

c[i+j-5] += c[i+j-4]/10; c[i+j-4] %= 10;

}

}

}

}

if(flag < 10)

{

if (c[0] || c[1] || c[2] || c[3] || c[4]) /*** 結果溢出判斷 ***/

{

return 0;

}

}

return 1;

}

void fun_print_result(char *result,int flag) /* 輸出結果函數 */

{

int p;

printf("\n本次計算結果共有 %d 位,如下:\n\n",N-flag);

for(p=flag;p<N-1;p++)

{

printf("%d",result[p]);

if((p+1-flag)%(21*80) == 0)

{

printf("\n計算結果太長,請按任一鍵看下一屏,Esc 退出");

if(getch() == 27)

{

clrscr(); exit(0);

}

clrscr();

}

}

printf("%d",result[N-1]);

printf("\n\n[OK]");

}

『叄』 c語言中數據溢出的問題怎麼解決

需要准備的材料分別有:電腦、C語言編譯器。

1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp,輸入問題基礎代碼。

『肆』 請教C語言高手,你們是如何防止數據計算溢出的

  1. 根據數據類型和計算結果范圍,選擇合適的數據類型。

  2. 另外一種方式就是對輸入數據進行限定,保證運算不會出現越界的可能。

  3. 還有一些其它復雜的計算方式,這里就不給你做介紹了

『伍』 C語言中為了避免緩沖區溢出應盡量使用哪些函數

緩沖區溢出是因為
使用了全局變數或者分配內存
然後這些東西佔用了電腦內存,一旦使用的內存太於在電腦可運行的分配內存就會產生溢出。
所以你要解決這個問題寫代碼要注意2點
1、少使用Const變數,在函數里使用變數(函數使用完變數會自動釋放)
2、分配內存後,就比如你new了一個對象,如果不使用這個對象的話就要Delete
(不同分配內存的東西,釋放方法不一樣,具體根據你分配內存的方法,網路一下就能找
到釋放方法)

『陸』 C語言中在階乘的程序中如何避免中間結果溢出

使用數組吧,數組的地址是連續的,所以你只需加個判斷就可以了,當地位溢出時,高位自動加一的操作,最後想輸出結果,那就遍歷數組的所以位數,求出來就可以了

『柒』 在c語言中如果輸入數據太大,該怎麼避免

C語言的輸入輸出比較原始,要看是如何進行輸入的:
1,從控制台輸入
這里其實輸入的都是終端的位元組流,控制位元組流就可以達到控制輸入數據的目的
2,從其他輸入設備輸入
例如,從文件讀取,那麼就要在程序里讀取合適大小的數據段,避免出現溢出的現象。

『捌』 c語言數據溢出怎麼辦

C語言的強大之處就在於他的靈活性,程序員自己把握。編譯器可以幫助預防錯誤,但有些程序會利用溢出,所以溢出不完全是錯誤的事情。
1、溢出:
數據類型超過了計算機字長的界限而出現的數據溢出;
2、溢出可能原因:
當應用程序讀取用戶數據,復制到應用程序開辟的內存緩沖區中,卻無法保證緩沖區的空間足夠時 (假設定義數組int Array[10], 而在調用時使用Array[11] 或存放的數據超過int類型容量等), 內存緩沖區就可能會溢出.
3、溢出因素分析:
由於C/C++語言所固有的缺陷,既不檢查數組邊界,又不檢查類型可靠性,且用C/C++語言開發的程序由於目標代碼非常接近機器內核,因而能夠直接訪問內存和寄存器,只要合理編碼,C/C++應用程序在執行效率上必然優於其它高級語言。然而,C/C++語言導致內存溢出問題的可能性也要大許多。

『玖』 在c語言編程中,如何避免整數運算溢出問題

C語言編譯時不會檢查數據溢出問題,需要編程者自行注意數據溢出問題。而且據我的經驗數據溢出問題會頻繁出現在初學習當中,程序寫多了就很少出現這樣的問題了。