1. 程式人生 > >計蒜客:A*B問題

計蒜客:A*B問題

問題:

計算兩個非負整數 A , B A,B 的乘積, A , B

A,B 可能會很大。

輸入格式:
第一行輸入一個非負整數 A A
第二行輸入一個非負整數 B B
A

, B A,B 的長度不大於 500 500

輸出格式
輸出 A ×

B A\times B 的值。

樣例輸入:

4321
1234

樣例輸出:

5332114

題解:

思路:和上一題思路基本一致,把兩個字串分別變成數字,存到對應的陣列中,然後在依次相乘

#include<iostream>
#include<string>
using namespace std;
char a[20005], b[20005];
int ReverseA[20005], ReverseB[20005];
int result[40005];
int main(void)
{
	string a, b;
	cout << "請輸入兩個數:";
	cin >> a >> b;
	int x, len_a = a.length(), len_b = b.length();
	//s.length()的意思是計算字串s的長度,其返回值是一個整數
	for (int i = 0; i <= len_a - 1; i++)
		ReverseA[i] = a[len_a - 1 - i] - '0';
	for (int i = 0; i <= len_b - 1; i++)
		ReverseB[i] = b[len_b - 1 - i] - '0';
	for (int i = 0; i < len_a; i++)
		for (int j = 0; j < len_b; j++)
			result[i + j] += ReverseA[i] * ReverseB[j];
	for (x = 0; x < len_a + len_b; x++)
	{
		result[x + 1] += result[x] / 10;
		result[x] = result[x] % 10;
	}
	while (result[x] == 0 && x > 0)
	{
		x--;
	}
	cout << "他們的乘積為:";
	for (x; x >= 0; x--)
		cout << result[x];
	cout << endl;
	system("pause");
	return 0;
}