大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。
一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。
思路很常規。先用字元陣列錄入大數,(這個時候高位存在陣列下標小的位置。 如:最高位在arr[0]處。 ---輸入方式原因)
然後再從高往低反向存入整數陣列中。(使得低位在陣列下標小的位置,符合常規。)
然後在進行計算,考慮進製情況。
加法比較簡單,就不多說什麼了。 直接上**。
#include #include #define maxlen 1000
int main()
}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;
}
其實,上述**還能進一步簡化,合併操作步驟。
可以將大數的顛倒過程和求和運算過程合併,顛倒的過程是逐位移動到整數陣列的過程,在移位的過程中,同時實現運算,但此時依舊先不考慮進製,所有各位的進製都在計算完成後統一處理。
#include #include int main()
for (i=0;i<2;i++) // 讀入兩個大數
for (i=0,d=0;i0)
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;
}
加法演算法固然簡單,也算大數的入門吧。也是有必要提一提的。
高精度 大數加法
1.p1601 a b problem 高精 題目描述 高精度加法,相當於a b problem,不用考慮負數.輸入格式 分兩行輸入。a,b a,b 10 500 輸出格式 輸出只有一行,代表a b的值 輸入輸出樣例 輸入1001 9099輸出 10100分析 include include inc...
4 大數,高精度計算 大數加法
大數是演算法語言中的資料型別無法表示的數,其位數超過最大資料型別所能表示的範圍,所以,在處理大數問題時首先要考慮的是怎樣儲存大數,然後是在這種儲存方式下其處理的實現方法。一般情況下大數的儲存是採用字元陣列來儲存,即將大數當作乙個字串來儲存,而對其處理是按其處理規則在陣列中模擬實現。思路很常規。先用字...
彙編 大數加法 or 高精度加法
部落格目錄 開發環境 emu8086 v3.05 可變長度,以乙個十進位制位佔乙個位元組。make com com file is loaded at cs 0100h org 100h jmp start sta db 200 dump sum db 6 dump coa db 9,2,5,6,2...