LINUX.ORG.RU

А что в столбик уиножать в школе не учили:)

Записываешь цифры числа в стоку(лучше наоборот, т.е. 1234->"4321"). И циклом складываешь по правилом сложения.

12 + 13 ---- 25

Вот, почитай(для pascal, правдо):

http://comp-science.narod.ru/DL-AR/okulov.htm

anonymous
()

У тебя ряд чисел в одной строке, я правильно понял?

std::string s = "1 2 3 4 5 ...";
std::istringstream istr(s);

double sum=0, val;

while (istr >> val)
    sum += val;

murla
()

class Number
{
public:
	Number(const std::string& s = "0");
	~Number();
	void multi_ten();
	Number& operator +=(char c);
	Number& operator *=(char c);
	Number& operator +=(const Number& num);
	Number& operator *=(const Number& num);
	const std::string& get_str();
private:
	std::string str;
};

int char2int(char c)
{
	switch(c) {
		case '1': return 1;
		case '2': return 2;
		case '3': return 3;
		case '4': return 4;
		case '5': return 5;
		case '6': return 6;
		case '7': return 7;
		case '8': return 8;
		case '9': return 9;
		case '0': return 0;
		default: throw Error("wrong char in char2int");
	}
}

char int2char(int i) {
	switch(i) {
		case 1: return '1';
		case 2: return '2';
		case 3: return '3';
		case 4: return '4';
		case 5: return '5';
		case 6: return '6';
		case 7: return '7';
		case 8: return '8';
		case 9: return '9';
		case 0: return '0';
		default: Error("wrong number in int2num");
	}
}

Number::Number(const std::string& s) : str(s) {}

Number::~Number() {}

void Number::multi_ten() { str.push_back('0'); }

Number& Number::operator +=(char c)
{
	int i = char2int(c);
	std::string::iterator it = str.end();
	while(it != str.begin() && i) {
		--it;
		i += char2int(*it);
		*it = int2char(i % 10);
		i /= 10;
	}
	if(i)
		str = int2char(i) + str;
	return *this;
}

Number& Number::operator *=(char c)
{
	int i = char2int(c);
	int ii = 0;
	int j = 0;
	std::string::iterator it = str.end();
	while(it != str.begin()) {
		--it;
		j = i * char2int(*it);
		j += ii;
		*it = int2char(j % 10);
		ii = j / 10;
	}
	if(ii)
		str = int2char(ii) + str;
	return *this;
}

Number& Number::operator +=(const Number& num)
{
	if(num.str.size() > str.size()) {
		Number n(num);
		n += *this;
		*this = n;
		return *this;
	}
	std::string::iterator it = str.end();
	std::string::const_iterator it2 = num.str.end();
	int i = 0;
	int j = 0;
	while(it2 != num.str.begin()) {
		--it;
		--it2;
		i = char2int(*it) + char2int(*it2) + j;
		*it = int2char(i % 10);
		j = i / 10;
	}
	while(it != str.begin() && j) {
		--it;
		i = char2int(*it) + j;
		*it = int2char(i % 10);
		j = i / 10;
	}
	if(j)
		str = int2char(j) + str;
	return *this;
}

Number& Number::operator *=(const Number& num)
{
	Number n1;
	Number n2;
	std::string::const_iterator it = num.str.end();
	int d = 0;
	while(it != num.str.begin()) {
		--it;
		n2 = (*this);
		n2 *= (*it);
		for(int i = 0; i < d; ++i) 
			n2.multi_ten();
		n1 += n2;
		d++;
	}
	*this = n1;
	return *this;
}

const std::string& Number::get_str() { return str; }

int main()
{
	try {
		std::cout << "A: ";
		std::string s;
		std::cin >> s;
		Number a(s);

		std::cout << "B: ";
		std::cin >> s;
		Number b(s);
		
                Number c(a);
		c += b;
                Number d(a);
		d *= b;
                std::cout << "A+B=" << c.get_str() << "\nA*B=" <<
                          << "A*B=" << d.get_str() << '\n';
		}
	}
	catch(Error er) {
		std::cout << er.str << '\n';
	}
}

hapchu ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.