4 大數,高精度計算 大數加法

2021-06-22 13:04:01 字數 1397 閱讀 2193

大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。

一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。

思路很常規。先用字元陣列錄入大數,(這個時候高位存在陣列下標小的位置。  如:最高位在arr[0]處。  ---輸入方式原因)  

然後再從高往低反向存入整數陣列中。(使得低位在陣列下標小的位置,符合常規。)

然後在進行計算,考慮進製情況。

加法比較簡單,就不多說什麼了。  直接上**。

[cpp]view plain

copy

#include 

#include 

#define maxlen 1000

intmain()  

}  printf("case %d:\n"

, j+1);  

printf("%s + %s = "

, a1, a2);  

z=0;  

for(i=maxlen-1;i>=0;i--)           

//列印

}  else

}  if(z==0) printf(

"0");  

printf("\n"

);  

}  return

0;  

}  

其實,上述**還能進一步簡化,合併操作步驟。

可以將大數的顛倒過程和求和運算過程合併,顛倒的過程是逐位移動到整數陣列的過程,在移位的過程中,同時實現運算,但此時依舊先不考慮進製,所有各位的進製都在計算完成後統一處理。

[cpp]view plain

copy

#include 

#include 

intmain()  

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

// 讀入兩個大數

for(i=0,d=0;i//從低位開始處理結果中的進製

if(d>0)  

sum[maxlen++] += d;         //如果最後乙個有進製,再往前挪一位

for(i=maxlen-1;i>=0;i--)  

s[maxlen-1-i] = sum[i] + '0'

;       

//結果以字串方式儲存

s[maxlen] = '\0'

;  printf("%s\n"

,s);         

//輸出結果

return

0;  

}  

大數,高精度計算 大數加法

大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。思路很常規。先用字...

6 大數,高精度計算 大數乘法

大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。大數乘法,相對之前...

9 大數,高精度計算 大數階乘

大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。階乘問題比較典型,...