试题 入门训练 序列求和


看到1 <= n <= 1,000,000,000。
就应该知道该用大数模板了
我乘除写到一个函数了

#include<iostream>
using namespace std;
int n,p1[20],p2[20],p3[20];
int la=0,lb=0;
long long int ans;
void fn1(int a,int b){
	
	while(a!=0){
		p1[la]=a%10;
		a/=10; la++;
	}
	while(b!=0){
		p2[lb]=b%10;
		b/=10; lb++;
	}
	int na=0,nx;
	for(int i=0;i<lb;i++){
		na=0;
		for(int j=0;j<la;j++){
			nx=p3[i+j]+p2[i]*p1[j]+na;
			p3[j+i]=nx%10;
			na=nx/10;
		}
		if(na!=0) p3[i+la]=na;
	}la=la+lb-1;
	if(na!=0){
		p3[la]=na; la++;
	}na=0;
	for(int i=la-1;i>=0;i--){
		nx=(na*10+p3[i]);
		p3[i]=nx/2;
		na=nx%2;
	}
}
int main(){
	cin>>n;
	fn1(n+1,n);
	int y=0;
	for(int i=la-1;i>=0;i--){
		if(p3[i]!=0) y=1;
		if(y) cout<<p3[i];
	}cout<<endl;
	return 0;
}
posted @ 2020-10-05 21:44  kidfff  阅读(106)  评论(0)    收藏  举报