• C++
  • 发明人:陈锦润 发明项目:高精度(建议置顶 这次没bug)

  • @ 2024-9-11 19:08:34
#include<iostream>

using namespace std;

template<typename _RandomAccessIterator>

inline void __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last, random_access_iterator_tag){
    
    if (__first == __last){
    	
		return;
	}
      
    --__last;
	
    while (__first < __last){
    
		iter_swap(__first, __last);
		
		++__first;
		--__last;
	}
	
	return;
}

template<typename _BidirectionalIterator>

inline void reverse(_BidirectionalIterator __first, _BidirectionalIterator __last) {
	
    __glibcxx_function_requires(_Mutable_BidirectionalIteratorConcept<_BidirectionalIterator>);
    __glibcxx_requires_valid_range(__first, __last);
    
    __reverse(__first, __last, __iterator_category(__first));
    
    return;
}

string add(string x,string y){

	string sum = "";

	bool plus_one = false,xone = false,yone = false;
	register unsigned long long xlen = x.size() - 1,ylen = y.size() - 1; 

	for(unsigned long long i = 0; i < max(x.size(),y.size()); ++i) {

		if(xone == true) {

			if(plus_one == true) {

				sum[i] += y[ylen - i] - '0';

				plus_one = false;

				if(sum[i] > '9'){

					sum[i] -= 10;
					sum += '1';

					plus_one = true;
				}
			}

			else {

				sum += '0' + (y[ylen - i] - '0');
			}
		}

		else if(yone == true) {

			if(plus_one == true) {

				sum[i] += x[xlen - i] - '0';

				plus_one = false;

				if(sum[i] > '9'){

					sum[i] -= 10;
					sum += '1';

					plus_one = true;
				}
			}

			else {
				
				sum += '0' + (x[xlen - i] - '0');
			}
		}

		else {

			if(xlen - i == 0){

				xone = true;
			}

			if(ylen - i == 0){

				yone = true;
			}

			if(plus_one == true) {

				sum[i] += ((x[xlen - i] - '0') + (y[ylen - i] - '0')) % 10;

				plus_one = false;

				if(sum[i] > '9') {

					sum[i] -= 10;

					plus_one = true;
				}
			}

			else {

				sum += '0' + (((x[xlen - i] - '0') + (y[ylen - i] - '0')) % 10);
			}

			if('0' + (x[xlen - i] - '0') + (y[ylen - i] - '0') > '9' || plus_one == true) {

				sum += '1';

				plus_one = true;
			}
		}
	}

	reverse(sum.begin(),sum.end());

	return sum;
}

int main() {

	string n,m;
	cin >> n >> m;

	cout << add(n,m);

	return 0;
}

卧槽这啥呀跟狗屎一样,我以前写的代码都是啥东西

4 comments

  • 1