2011年4月21日 星期四

小算盤如何算這麼大的數字?

有一天,記得在網路上看見一個題目
「為什麼微軟的小算盤可以算這麼大的數字?怎麼寫出相同功能呢?」
就這樣開始思考及解這個問題



演算法很簡單!
只要將進位給切出來,給另一個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;
}

沒有留言:

張貼留言