大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。
一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。
思路很常規。先用字元陣列錄入大數,(這個時候高位存在陣列下標小的位置。 如:最高位在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 大數,高精度計算 大數階乘
大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。階乘問題比較典型,...