wanimaru47's diary

プログラミング等々

Rubyはすごい?!

 AOJ 0015を解いてみてRubyってすごいなと思った反面、プログラミング言語でこんなにプログラムの組み方が変わるんだなと思いました。
 もともとRubyは直感的なプログラミングを求めて作られた言語だから当然と言えば当然だけど、はっきり言ってC++Rubyでコードの違いが出てしまうとmatzの手のひらの上で踊らされてる感がある。(笑)

コードです。

num = gets.to_i
while num > 0
	num1 = gets.to_i
	num2 = gets.to_i
	ans = num2+num1
	if ans >= 10**80 then
		puts "overflow"
	else
		puts ans
	end
	num = num - 1
end
#include <iostream>
#include <string>
#include <stack>
using namespace std;

int changeNumber(char number)
{
	int num = 0;
	for (char i = 48; i < 58; i++) {
		if (number == i) return num;
		num++;
	}
}

void puls(string number1, string number2)
{
	stack<int> s;
	int tmp = 0;
	for (int i = 1; i <= number1.size() && i <= number2.size(); i++) {
		tmp =  tmp + changeNumber(number1[number1.size() - i]) + changeNumber(number2[number2.size() - i]);
		s.push(tmp % 10);
		tmp /= 10;
	}
	for (int i = number2.size() + 1; i <= number1.size(); i++) {
		tmp = tmp + changeNumber(number1[number1.size() - i]);
		s.push(tmp % 10);
		tmp /= 10;
	}
	if (tmp > 0) s.push(tmp);
	if (s.size() > 80) cout << "overflow" << endl;
	else {
		while(0 < s.size()) {
			cout << s.top();
			s.pop();
		}
		cout  << endl;
	}
}

int main(void)
{
	string number1, number2;
	int count;

	cin >> count;
	for (int i = 0; i < count; i++) {
		cin >> number1 >> number2;
		if (number1.size() < number2.size()) puls(number2, number1);
		else puls(number1, number2);
	}
	
	return 0;
}