程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> uva 10106 Product(高精度大數乘法)

uva 10106 Product(高精度大數乘法)

編輯:C++入門知識

uva 10106 Product(高精度大數乘法)


昨天剛寫了個大數加法,今天又來了個大數乘法,其實解法差不多,只不過換成了好多個大數的相加而

已,看別人的算法其實跟我的也差不多,都是這個姿勢。wa了一次,竟然忘了考慮0的情況,以後交題之前,都要判

斷一下邊緣數據,大數據和小數據,要不就是白白被扣時間啊,另外還要注意的是變量不要重復定義!!!除非在調用函數裡,要不很容易出錯的!!!

 

#include
#include
#include
#include
using namespace std;
char a[300];//存放輸入的第一組數據 
char b[300];// 存放輸入的第二組數據 
int c[600];//存放每一位數與另一組數據相乘後的結果 
int d[600];//用來保存已經計算過的每一位數與b相乘之後的和 
void solve(char c[])//將輸入的數據翻轉 
{
	char t;
	int len=strlen(c);
	for(int i=0; i<=(len-1)/2; i++)
	{
		t=c[i];
		c[i]=c[len-1-i];
		c[len-1-i]=t;
	}
}
int main()
{
	int i,j,x,k,q,up,up1,max1;
	while(scanf("%s%s",a,b)!=EOF)
	{
		if(strcmp(a,"0")==0||strcmp(b,"0")==0)//處理輸入是0的情況 
		{
				printf("0\n");
				continue;
		}
		memset(d,0,sizeof(d));
		memset(c,0,sizeof(c));
		solve(a);
		solve(b);
		int lena=strlen(a);
		int lenb=strlen(b);
		max1=k=0;
		for(i=0;i=k)
					c[q]=0;
				d[q]=c[q]+d[q]+up;
				up=d[q]/10;
				d[q]=d[q]%10;
			}
			if(up!=0)
				d[max1++]=up;//d數組存放前i位數分別與b相乘後的和 
		}
		int flag=1;
		for(j=max1-1;j>=0;j--)
		{
			if(flag==1&&d[j]==0)//用來處理前導0問題 
				continue;
			printf("%d",d[j]);
			flag=0;
		}
		printf("\n");
	}
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved