大数加法和乘法

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int ans[N];
string a,b;
int x[N],y[N];
void Plus(int ma){
	memset(ans,0,sizeof(ans));
		 printf("加法结果为\n");
		 for(int i=0;i<ma;i++)
		 ans[i]+=x[i]+y[i];
		 for(int i=0;i<=ma;i++)
		 if(ans[i]>=10) {
		 	ans[i+1]+=ans[i]/10; ans[i]%=10;
		 }
		 bool flag=0;
		 for(int i=ma+1;i>=0;i--)
		 {
		 	if(flag) cout<<ans[i];
		 	else if(ans[i]&&!flag){
		 		cout<<ans[i]; flag=1;
			 }
			 else continue;
			 }
			 cout<<endl;
}
void times(int la,int lb){
	memset(ans,0,sizeof(ans));
		for(int i=la-1;i>=0;i--)
 		for(int j=lb-1;j>=0;j--){
 			ans[i+j]+=x[i]*y[j];
		 }
		 for(int i=0;i<la+lb;i++)
		 	if(ans[i]>=10){
		 		ans[i+1]+=ans[i]/10; ans[i]%=10;
			 }
		
		 bool flag=0;
		 printf("乘法结果为\n");
		 for(int i=la+lb;i>=0;i--){
		 	if(flag)
		 	cout<<ans[i];
		 	else if(ans[i]&&!flag){
		 		cout<<ans[i];
		 		flag=true;
			 }
			 else continue;
		 }
		 cout<<endl;
		 
}
 int main(){
 	printf("输入两个字符串代表两个数\n");
 	while(cin>>a>>b){
 		int la=a.length(),lb=b.length();
 		int ma=max(la,lb);
 		memset(x,0,sizeof(x));
 		memset(y,0,sizeof(y));
 		int cnt=0;
 		for(int i=la-1;i>=0;i--)
 		x[cnt++]=a[i]-'0';
 		cnt=0;
 		for(int i=lb-1;i>=0;i--)
 		y[cnt++]=b[i]-'0';
 		Plus(ma);
 		times(la,lb);
 		printf("输入两个字符串代表两个数\n");
	 }
 	return 0;
 }
posted @ 2019-01-16 20:44  ChunhaoMo  阅读(100)  评论(0)    收藏  举报