Q
  • 板块题目总版
  • 楼主QwQ_QaQ_QuQ
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/20 17:32
  • 上次更新2024/4/20 17:35:27
查看原帖
Q
1308602
QwQ_QaQ_QuQ楼主2024/4/20 17:32

在一个OJ上的高精度连加(1+2+...+n),TLE求tiao,谢谢QAQ

#include <bits/stdc++.h>
using namespace std;
struct big{
	int num[204]={0};
	int size,sign;
};
big input(string a){
	big b;
	b.size=a.size();
	for(int i=0,j=a.size()-1;i<b.size;++i,--j)b.num[i]=a[j]-'0';
	return b;
}
void clear(big &a){
	for(int i=a.size-1;i>=1;--i){
		if(a.num[i]==0)--a.size;
		else return;
	}
}
void print(big a){
	clear(a);
	for(int i=a.size-1;i>=0;--i)cout<<a.num[i];
}
big add(big a,big b){
	big c;
	c.size=max(a.size,b.size)+1,c.sign=1;
	int flag=0;
	for(int i=0;i<c.size;++i){
		c.num[i]=a.num[i]+b.num[i]+flag;
		flag=c.num[i]/10;
		c.num[i]%=10;
	}
	clear(c);
	return c;
}
int main(){
	long long int n;
	cin>>n;
	big ans;
	for(long long int i=1;i<=n;++i){
		string s=to_string(i);
		big x=input(s);
		ans=add(ans,x);
	}
	print(ans);
}
2024/4/20 17:32
加载中...