原题
https://www.codewars.com/kata/56e9e4f516bcaa8d4f001763/train/cpp
题目
Description:
We want to generate a function that computes the series starting from 0 and ending until the given number following the sequence:
0 1 3 6 10 15 21 28 36 45 55 ….
which is created by
0, 0+1, 0+1+2, 0+1+2+3, 0+1+2+3+4, 0+1+2+3+4+5, 0+1+2+3+4+5+6, 0+1+2+3+4+5+6+7 etc..
Example:
Input:6
Output : 0+1+2+3+4+5+6 = 21Input : -15
Output : -15<0Input : 0
Output : 0=0
分析
- 输入数值当大于0时,输出从0到输入数值的累加的字符串;
- 输入数值当小于0时,输出该数<0;
- 输入数值为0时,输出0=0;
代码
using namespace std;
class SequenceSum{
int count;
public:
SequenceSum (int);
string showSequence();
};
string SequenceSum::showSequence(){
string res;
int sum(0);
stringstream s_sum;
if(count < 0){
s_sum<<count;
res = string(s_sum.str())+string("<0");
return res;
}
if(count == 0){
res= string("0=0");
return res;
}
for(size_t i = 0; i <= count ;i++){
stringstream s_plus;
s_plus<<i;
cout << s_plus.str() <<endl;
sum +=i;
res += string(s_plus.str())+string("+");
}
res.pop_back();
s_sum<<sum;
res += string(" = ") + string(s_sum.str());
return res;
}
SequenceSum::SequenceSum (int c) {
count = c;
}
参考代码
using namespace std; class SequenceSum{ int count; public: SequenceSum (int); string showSequence(); }; string SequenceSum::showSequence(){ if(0 == count) return "0=0"; if(0 > count) return to_string(count) + "<0"; ostringstream oss; for(size_t i=0;i<=count;i++){ oss << i; if(i!=count) oss <<"+"; else oss << " = " << (count*(count+1)>>1); } return oss.str(); } SequenceSum::SequenceSum (int c) { count = c; }
// 单独数字转字符串可使用to_string() (C++11)
// 多个数字转字符串可使用ostringstream
// 多个数字有序数列求和,可用高斯求和公式n*(n+1)/2
//作者:jdzhangxin
//链接:http://www.jianshu.com/p/5bde637c3bd9
//來源:简书
//著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。