日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

给定a和n,计算a+aa+aaa+a...a(n个a)的和(大数据处理)

發布時間:2023/12/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 给定a和n,计算a+aa+aaa+a...a(n个a)的和(大数据处理) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述:

給定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用來存儲進位的。

[cpp] view plaincopyprint?
  • #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


    下面有個人給出了更簡單的解法:直接模擬小學加法從個位數開始加,該進位的進位,然后存到一個棧里面,最后出棧輸出就完事了,代碼:

    [cpp] view plaincopyprint?
  • #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)的和(大数据处理)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。