欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

7-55 数列求和-加强版 (20分)

程序员文章站 2022-03-13 13:41:17
...

简单版:7-9 特殊a串数列求和
与该题差别:该题非负整数N,简单版是正整数,该题是0-100000,简单版是0-9

知识点

N(0≤N≤100000)
结果是会大于int类型的
因为要防止数据溢出,所以都要要用数组来保存数字的位数。
7-55 数列求和-加强版 (20分)
7-55 数列求和-加强版 (20分)

方法一(数组)

b+=a*(n-i); 目前对这个公式很模糊

#include<bits/stdc++.h>
using namespace std;
//把个十百千...依次为s[0]s[1]s[2] 

int main(){
	int a,n;cin>>a>>n; //1 3
	long long b=0;
	vector<int> s;
	if(0==n)cout<<"0";  //一个判断点
	for(int i=0;i<n;i++){
		b+=a*(n-i);  // 1*(3-0)=3; 1*(3-1)=2 ; 1*(3-2)=1; 
		s.push_back(b%10); //3 2 1
		b/=10;  //b=0 0 0
	} 
	while(b!=0)//不要遗失最高位 
	{
		s.push_back(b%10);
		b/=10;
	}
	for(int i=s.size()-1;i>=0;i--){
		cout<<s[i];
	}
	return 0;
}

方法二(字符串)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

int main() {
	ll a,n,f=0;
	string s;
	cin>>a>>n; 
	if(n==0)
		s="0";
	for(int i=n;i>=1;i--){
		ll t=a*i+f;
		s+=(t%10)+'0';
		f=t/10;
	}
	while(f){
		s+=(f%10)+'0';
		f/=10;
	}
	for(int i=s.size()-1;i>=0;i--){
		putchar(s[i]);
	}
	return 0;
}
相关标签: PTA_L1.5