深入浅出学算法019-求n累加和

题目描述

用高精度方法,求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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值