有一天,記得在網路上看見一個題目
「為什麼微軟的小算盤可以算這麼大的數字?怎麼寫出相同功能呢?」
就這樣開始思考及解這個問題
演算法很簡單!
只要將進位給切出來,給另一個long使用!(這個如下面的code)
一旦long不夠用,就使用double表示科學記號吧!(這個沒做)
最後顯示出來看起來有像一個數字,而且字沒錯,就可以了!
#include
using namespace std;
int main()
{
do{
int i;
long a = 1; //切完的零頭(保持不會爆掉的 長)
long c = 0; //切出來的頭
long d = 0; //用乘法原理運算的積當頭(另一個 長)
cout << "給一個數字:";
for(cin >> i ; i>0 ; --i)
{
cout << "i=" << i << "\t";
a = a*i;
c = (a > 99999999) ? (a * 0.00000001) : 0;
a = (c>0) ? (a - 100000000 * c) : a;
d = d*i+c;
cout << "a=" << a << "\tc=" << c << "\td=" << d << endl;
}
cout << "最後的答案=" << d << a << endl;
}while(1);
return 0;
}
沒有留言:
張貼留言
(什麼是留言欄訊息?)