题目描述
用高精度方法,求s=1+2+3+……+n的精确值(n以一般整数输入)。
输入
输入一个整数n(n<=1000000)
输出
输出累加和
样例输入
10
样例输出
55
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdlib>
#include<cmath>
using namespace std;
// 高精度加法
string getsum(string s1,string s2){
// 首先反转s1和s2,因为个位在字符串最末端
// cc表示进位
int cc=0;
string sum="";
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
// 这里要考虑数字位数不同的情况
int min_length=s1.length()>s2.length()?s2.length(): s1.length();
string max_str=s1.length()>s2.length()?s1: s2;
for(int i=0;i<min_length;i++){
// 这里相加时要带上上一位的进位值
int temp_sum=(s1[i]-'0')+(s2[i]-'0')+cc;
// 判断是否需要进位
cc=temp_sum/10;
sum+=(temp_sum)%10+'0';
}
// 短的字符串已经相加完毕,将长字符串的剩余高位继续带进位计算
for(int i=min_length;i<max_str.length();i++){
int temp_sum=(max_str[i]-'0')+cc;
// 判断是否需要进位
cc=temp_sum/10;
sum+=(temp_sum)%10+'0';
}
if(cc==1) sum+='1';
// sum是从个位开始算的,需要反转
reverse(sum.begin(),sum.end());
return sum;
}
int main(){
int n;
cin>>n;
string sum="1";
for(int i=2;i<=n;i++){
sum=getsum(sum,to_string(i));
}
cout<<sum<<endl;
return 0;
}