ACM(一)大數相乘

#include <iostream>

using namespace std;
void arrayPrint(int *p);
void Muli(char *num1,char *num2);

int main()
{
	char num1[100];
	char num2[100];
	cin>>num1>>num2;
	Muli(num1,num2);
	getchar();
	getchar();

}

void Muli(char *num1,char *num2)
{
	//判斷輸入
	if(num1==NULL||num2==NULL)
	{
		cout<<"error1"<<endl;
		return;
	}
	int len1=strlen(num1);
	int len2=strlen(num2);

	if(len1==0||len2==0)
	{
		cout<<"error2"<<endl;
		return;
	}
	//字符串轉數組
	int *tempNum1=new int[len1+1];
	int *tempNum2=new int[len2+1];
	memset(tempNum1,0,sizeof(int)*(len1+1));
	memset(tempNum2,0,sizeof(int)*(len2+1));
	tempNum1[len1]=-1;
	tempNum2[len2]=-1;
	for(int i=0;i<len1;i++)
	{
		if (num1[len1-1-i]<'0'||num1[len1-1-i]>'9')
		{
			cout<<"error3"<<endl;
			return;
		}
		tempNum1[i]=num1[len1-1-i]-'0';
	}
	for (int i=0;i<len2;i++)
	{
		if (num2[len2-1-i]<'0'||num2[len2-1-i]>'9')
		{
			cout<<"error4"<<endl;
			return;
		}
		tempNum2[i]=num2[len2-1-i]-'0';
	}
	// 得到結果
	int *result=new int[len1+len2+1];
	memset(result,0,sizeof(int)*(len1+len2+1));
	for (int i=0;i<len1;i++)
		for (int j=0;j<len2;j++)
		{
			int temp=tempNum1[i]*tempNum2[j];
			result[i+j]+=temp%10;
			result[i+j+1]+=temp/10;
		}
		for (int i=0;i<len1+len2-1;i++)
		{
			int temp=result[i];
			if (temp>9)
			{
				result[i]=temp%10;
				result[i+1]+=temp/10;
				i=0;
			}
		}
		if (result[len1+len2-1]==0)
		{
			result[len1+len2-1]=-1;
		}
		else
			result[len1+len2]=-1;

		//打印結果
		cout<<endl;
		arrayPrint(tempNum1);
		cout<<'*'<<endl;
		arrayPrint(tempNum2);
		cout<<'='<<endl;
		arrayPrint(result);


		delete []result;
		delete []tempNum1;
		delete []tempNum2;
}

void arrayPrint(int *p)
{
	int i=0;
	while (p[i]!=-1)
	{
		i++;
	}
	int Hindex=i-1;
	for (int i=Hindex;i>=0;i--)
	{
		cout<<p[i];
	}
	cout<<endl;
}


 

 

 

 

 

 

發佈了77 篇原創文章 · 獲贊 11 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章