为啥交不上去(高精)
  • 板块CF1772A A+B?
  • 楼主Chen_Three
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/17 12:42
  • 上次更新2024/7/17 14:22:54
查看原帖
为啥交不上去(高精)
947029
Chen_Three楼主2024/7/17 12:42
#include<bits/stdc++.h>
using namespace std;
const int N = 1100 ;
char S[N] ;
char T[N] ;
struct bigNumber{
	int len , x[N] ;
	bigNumber( ) {len = 1 ;	memset(x, 0 , sizeof(x)) ;}
	void print() {
		for (int i = len ;i;i--) printf("%d",x[i]) ;puts("") ;
	}
} a,b,c;//f[N][N] , s[N][N] , a,b,c;

inline bool operator <(bigNumber a, bigNumber b) {
	if (a.len != b.len ) return a.len< b.len ;
	for (int i = a.len;i ;i--) 
		if (a.x[i] != b.x[i]) return a.x[i] <b.x[i] ;
	return 0 ;
}

inline bool operator <=(bigNumber a, bigNumber b) {	
	if (a.len != b.len ) return a.len< b.len ;
	for (int i = a.len;i ;i--) 
		if (a.x[i] < b.x[i]) return 1 ;
		else if (a.x[i] >b.x[i]) return 0 ;
	return 1 ;
}

bigNumber fix(bigNumber a ) {
	for (int i = 1;i< a.len;++ i) {
		if (a.x[i] <0) a.x[i]+= 10 , a.x[i+1] -- ;
		a.x[i+1] += a.x[i] / 10 ;
		a.x[i] %= 10 ;
	}
	while (a.x[a.len] >=10 ) {
		a.x[a.len + 1] += a.x[a.len] / 10 ;
		a.x[a.len] %= 10 ; a.len ++ ;
	}
	while (!a.x[a.len] && a.len>1) a.len-- ;
	return a ;	
}

inline bigNumber operator *(bigNumber a , int b) {
	for (int i = 1;i<= a.len ;++ i ) a.x[i] *= b ;
	return fix(a) ;
}
inline bigNumber operator *(bigNumber a , bigNumber b) {
	bigNumber c ;	
	c.len = a.len + b.len -1 ; 
	for (int i = 1;i<= a.len ;++ i) 
		for (int j = 1;j<=b.len ; ++j) 
			c.x[i+j-1] += a.x[i] * b.x[j] ;
	return fix(c) ;
}

inline bigNumber operator +(bigNumber a , int b) {
	a.x[1] += b ;
	return fix(a) ;
}

inline bigNumber operator +(bigNumber a , bigNumber b) {
	bigNumber c ;
	c.len = max(a.len, b.len ) ;
	for (int i = 1;i<= c.len ;++ i) c.x[i] = a.x[i] + b.x[i] ;
	return fix(c) ;
}

inline bigNumber operator -(bigNumber a , int b) {
	a.x[1] -= b ;
	return fix(a) ;
}

inline bigNumber operator -(bigNumber a , bigNumber b) {
	bigNumber c ;
	c.len = max(a.len, b.len ) + 1 ;
	for (int i = 1;i<= c.len ;++ i) c.x[i] = a.x[i] - b.x[i] ;
	return fix(c) ;
}

inline bigNumber operator /(bigNumber a, int y) 
{
	int x = 0 ;
	bigNumber c ;
	c.len = a.len ;
	for (int i = c.len; i>0; --i) {
		c.x[i] = (x* 10 + a.x[i]) / y ; 
	    x = (x* 10+ a.x[i]) % y ; 
	}		
	return fix(c) ;
} 


inline bigNumber operator /(bigNumber a, bigNumber b) {
	bigNumber c ;	
	int s= 0 ;
	while (a.len >b.len) b= b * 10 , s++ ;
	while (s>=0) {
		c= c * 10 ; 
		while (b <= a) c=c+1 , a = a- b;
		b= b / 10  , s-- ; 
	}
	return fix(c) ;	
}

inline bigNumber operator %(bigNumber a, int y) 
{
	bigNumber c = a / y ;
	a = a - c * y ;
	return fix(a) ;	
}

inline bigNumber operator %(bigNumber a, bigNumber b) 
{
	int s= 0 ;
	while (a.len >b.len) b= b * 10 , s++ ;
	while (s>=0) {
		while (b <= a) a = a - b;	
		b= b / 10  , s-- ; 
	}
	return fix(a) ;	
}

inline bigNumber poww(int m, int p) 
{
	a.x[1] = 1 ;
	b.x[1] = m ;
	while (p) {
		if (p & 1) a= a * b;
		p= p>> 1; 
		b= b* b ;
	}
	return fix(a) ;
}

int main(){
	int Z;
	cin >> Z;
	while(Z--){
		bigNumber a,b,c;
		string s;
		cin >> s;
		S[1]=s[0];
		T[1]=s[2];
		int lens= strlen(S+1) ;
		int lent= strlen(T+1) ;
		for(int i = 1; i <= lens; i++){
			a=a*10+(S[i]-'0');
		}
		for(int i = 1; i <= lent; i++){
			b=b*10+(T[i]-'0');
		}
		c=a+b;
		c.print();
	}
}
2024/7/17 12:42
加载中...