给定a和n,计算a+aa+aaa+a...a(n个a)的和(大数据处理)
生活随笔
收集整理的這篇文章主要介紹了
给定a和n,计算a+aa+aaa+a...a(n个a)的和(大数据处理)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述:
輸入:
輸出:
樣例輸入: 1 10
樣例輸出: 1234567900
#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比較大的時候,運行速度很慢。但不會溢出。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
給定a和n,計算a+aa+aaa+a...a(n個a)的和。
測試數據有多組,輸入a,n(1<=a<=9,1<=n<=100)。
對于每組輸入,請輸出結果。
從題中就可以看出,當a = 9, n = 100的時候,一個int類型的數是存不下100位的數,所以不能運用平常的方法來求,下面介紹我的解法,我聲明一個向量v用來存儲a+aa+aaa+a...a(n個a)的和,temp是用來存儲a...a(n個a)的,從個位向高位分別相加,hight用來存儲進位的。
[cpp] view plaincopyprint?
下面有個人給出了更簡單的解法:直接模擬小學加法從個位數開始加,該進位的進位,然后存到一個棧里面,最后出棧輸出就完事了,代碼:
[cpp] view plaincopyprint?但是這個有個缺點,就是當n好大,t = (n - i + 1) * a 會溢出,這個程序的有點是運行速度很快,我上面的代碼當n比較大的時候,運行速度很慢。但不會溢出。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的给定a和n,计算a+aa+aaa+a...a(n个a)的和(大数据处理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 农行etc信用卡消费几次免年费?这些事项
- 下一篇: 再说千遍万遍,都不如这四句话管用,不服不