給定a和n,計算a+aa+aaa+a…a(n個a)的和(大資料處理)

來源:互聯網
上載者:User
題目描述:

給定a和n,計算a+aa+aaa+a...a(n個a)的和。

輸入:

測試資料有多組,輸入a,n(1<=a<=9,1<=n<=100)。

輸出:

對於每組輸入,請輸出結果。

範例輸入:
1 10
範例輸出:
1234567900

從題中就可以看出,當a = 9, n = 100的時候,一個int類型的數是存不下100位的數,所以不能運用平常的方法來求,下面介紹我的解法,我聲明一個向量v用來儲存a+aa+aaa+a...a(n個a)的和,temp是用來儲存a...a(n個a)的,從個位向高位分別相加,hight用來儲存進位的。

#include <iostream>#include <vector>using namespace std;int main(){int a, n;int sum = 0;vector<int> v;vector<int> temp;vector<int>::iterator it;int hight = 0; //儲存進位while(cin >> a >> n){v.clear();temp.clear();v.push_back(a);temp.push_back(a);for(int i = 2; i <= n; i++){temp.push_back(a);int j = temp.size() - 1; int k = v.size() - 1;hight = 0;sum = 0;while(k >= 0 && j >= 0){ //從低位向高位相加sum = temp[j] + v[k] + hight;hight = 0;if(sum > 9){hight = sum / 10; //求進位}v[k] = sum % 10; k--;j--;}//if(hight > 0){while(j >= 0){ //可能要加的數比總的位元還要多,比如 9  + 99;sum = temp[j] + hight;hight = 0;if(sum > 9){hight = sum / 10;}v.insert(v.begin(), sum % 10);j--;}if(hight > 0){//如果還有進位,那就放到最高位v.insert(v.begin(), hight);}//}}for(it = v.begin(); it != v.end(); it++){cout << *it;}cout << endl;}return 0;}

結果:a = 9 n = 200,a+aa+aaa+a...a = 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110910


下面有個人給出了更簡單的解法:直接類比小學加法從個位元開始加,該進位的進位,然後存到一個棧裡面,最後出棧輸出就完事了,代碼:

#include <cstdio>#include <stack>using namespace std;int main(){//    freopen("1.txt", "r", stdin);    int a, n, i, t, c;    while(~scanf("%d %d", &a, &n))    {        stack<int> S;        for(c=0,i=1; i<=n; i++)        {            t = (n-i+1)*a;            S.push((t+c)%10);            c = (t+c)/10;        }        if(c>0)            S.push(c);        while(!S.empty())        {            printf("%d", S.top());            S.pop();        }        printf("\n");    }    return 0;}

但是這個有個缺點,就是當n好大,t = (n - i + 1) * a 會溢出,這個程式的有點是運行速度很快,我上面的代碼當n比較大的時候,運行速度很慢。但不會溢出。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.