【C++】数列求和-加强版
題目描述如下:
給定某數字A(1≤A≤9)以及非負整數N(0≤N≤100000),求數列之和S=A+AA+AAA+?+AA?A(N個A)。例如A=1, N=3時,S=1+11+111=123。
輸入格式:
輸入數字A與非負整數N。
輸出格式:
輸出其N項數列之和S的值。
輸入樣例:
1 3輸出樣例:
123看到本題后,有了兩種想法;
第一種:將基數字存為字符串,利用string 來增加字符串的長度 string str+=basestr;
然后將str轉換為整型,與sum累和,再將sum存為字符串。
若用此種方法的話要使用到string->int 和 int->string,借此熟悉一下相關知識。
在c++中比較方便的是使用stringstream;
使用之前需要包含頭文件string 和 sstream
#include <string>?
#include <sstream>
?string轉int
int num;
string str;
stringstream stream1(str);
//stringstream stream1;? ? ?stream1<<str;? ? ? ? //將str寫入
stream1>>num;? ? ? ? //將流內的內容輸出到num中
?int轉string
int num;
string str;?
str = std::to_string(num);? ? ? ? //將num轉換為字符賦值給str 。????????缺點是c++11才支持
但在實現的時候發現這條路走不通,因為無論怎么操作,都有可能超出int的范圍。然后考慮用數組的方法。?
第二種:因為每一位的數字都是相同的,考慮用數組的方法
1 1 1 1
1 1 1
1 1
1
st[0] = 4*1+rem(rem:余數)
st[1] = 3*1+rem
...依此類推
代碼如下:
// 數列求和(加強版) #include <iostream> int st[1000000]; //存放數據的數組 using namespace std; int main(){int base;cin>>base;int num;cin>>num;if(num==0){ //若num為0,即前0項和,直接輸出0返回 cout<<"0";return 0;}int reminder = 0;int cnt = 0;for(int i=0;i<num;i++){int temp = reminder + (num-i)*(base);if(temp>9){ //若大于9,則產生余數 reminder = temp/10;st[i] = temp%10;cnt++;}else{reminder = 0;st[i] = temp;cnt++;}}if(reminder>0){ //計算到最后還有余數,就讓余數存在cnt的位置 st[cnt] = reminder;cnt++;}for(int i=cnt-1;i>=0;i--){cout<<st[i];} }總結
以上是生活随笔為你收集整理的【C++】数列求和-加强版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word打开html显示空白,电脑打开W
- 下一篇: C++容器亲自总结