C++ 大数乘法

C++大数乘法

写着玩,时间复杂度极高

//#include<bits/stdc++.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char one[1]={'1'},fir_[1000000]={'\0'},fir[1000000]={'\0'},sec[1000000]={'\0'},sec_[1000000]={'\0'},count_[1000000]={'\0'},count[1000000]={'\0'},last[1000000]={'\0'};
char plus_show(char *fir,char *sec,char *last);
char plus(char *fir,char *sec,char *last);

int main(){
	scanf("%s",fir);
	scanf("%s",sec);
	count[0]='1';
	strcpy(fir_,fir);
	//printf("fir_:%s\n",fir_);
	while(1){
		//printf("%d %s\n",strcoll(count,sec),last);
		if(strcoll(count,sec)==0&&sec[0]=='1'&&strlen(sec)==1){
			printf("%s\n",fir);
			return 0;
		}
		else if(strcoll(count,sec)==0){
			printf("%s\n",last);
			return 0;
		}
		else{
			plus(fir,fir_,last);//加法 
			/*for(int nm=0;nm<strlen(fir_);nm++){
				fir_[nm]='\0';
			}*/
			strcpy(fir_,last);
			/*for(int nm=0;nm<strlen(last);nm++){
				last[nm]='\0';
			}*/
			plus(one,count,count_);//count++ 
			//printf("count_:%s\n",count_);
			/*for(int nm=0;nm<strlen(count);nm++){
				count[nm]='\0';
			}*/
			strcpy(count,count_);
			//printf("count:%s\n",count);
			/*for(int nm=0;nm<strlen(count_);nm++){
				count_[nm]='\0';
			}*/
		}
	}
	return 0;
}

char plus(char *fir,char *sec,char *last){
	int i,j,k;
	i=j=k=0;
	int first=0,second=0,judge=0,judge_=0;
	//printf("this is a program about plus.\n");
	//printf("first number:\n");
	
	//printf("second number:\n");
	
	first=strlen(fir);
	second=strlen(sec);
	//printf("%d\n",first);
	//printf("%d\n",second);
	judge=judge_=0;
	if(first>second){
		for(i=second-1,j=first-1;i>=0;j--,i--){
			judge=fir[j]-48+sec[i]-48;
			if(judge>9&&judge_==0){
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge>9&&judge_==1){
				judge=judge+1;
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge<=9&&judge_==1){
				judge=judge+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[j]=judge+48;
				}
				else{
					last[j]=judge+48;
					judge_=0;
				}
			}
			else if(judge<=9&&judge_==0){
				last[j]=judge+48;
				judge_=0;
			}
		}
		for(i=first-second-1;i>=0;i--){
			if(judge_==0){
				last[i]=fir[i];
				judge_=0;
			}
			else if(judge_==1){
				judge=fir[i]-48+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[i]=judge+48;
				}
				else{
					judge_=0;
					last[i]=judge+48;
				}
			}
		}
		if(judge_==1){
			int li;
			li=strlen(last)+1;
			for(i=li;i>=1;i--){
				last[i]=last[i-1];
			}
			last[0]='1';
		}
		//printf("%s\n",last);
	}
	else if(first<second){
		for(i=first-1,j=second-1;i>=0;j--,i--){
			judge=sec[j]-48+fir[i]-48;
			if(judge>9&&judge_==0){
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge>9&&judge_==1){
				judge=judge+1;
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge<=9&&judge_==1){
				judge=judge+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[j]=judge+48;
				}
				else{
					last[j]=judge+48;
					judge_=0;
				}
			}
			else if(judge<=9&&judge_==0){
				last[j]=judge+48;
				judge_=0;
			}
		}
		for(i=-first+second-1;i>=0;i--){
			if(judge_==0){
				last[i]=sec[i];
				judge_=0;
			}
			else if(judge_==1){
				judge=sec[i]-48+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[i]=judge+48;
				}
				else{
					judge_=0;
					last[i]=judge+48;
				}
			}
		}
		if(judge_==1){
			int li;
			li=strlen(last)+1;
			for(i=li;i>=1;i--){
				last[i]=last[i-1];
			}
			last[0]='1';
		}
		//printf("%s\n",last);
	}
	else{
		for(i=second-1,j=first-1;i>=0;j--,i--){
			judge=fir[j]-48+sec[i]-48;
			if(judge>9&&judge_==0){
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge>9&&judge_==1){
				judge=judge+1;
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge<=9&&judge_==1){
				judge=judge+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[j]=judge+48;
				}
				else{
					last[j]=judge+48;
					judge_=0;
				}
			}
			else if(judge<=9&&judge_==0){
				last[j]=judge+48;
				judge_=0;
			}
		}
		if(judge_==1){
			int li;
			li=strlen(last)+1;
			for(i=li;i>=1;i--){
				last[i]=last[i-1];
			}
			last[0]='1';
		}
		//printf("%s\n",last);
	}
}

char plus_show(char *fir,char *sec,char *last){
	int i,j,k;
	i=j=k=0;
	int first=0,second=0,judge=0,judge_=0;
	//printf("this is a program about plus.\n");
	//printf("first number:\n");
	
	//printf("second number:\n");
	
	first=strlen(fir);
	second=strlen(sec);
	//printf("%d\n",first);
	//printf("%d\n",second);
	judge=judge_=0;
	if(first>second){
		for(i=second-1,j=first-1;i>=0;j--,i--){
			judge=fir[j]-48+sec[i]-48;
			if(judge>9&&judge_==0){
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge>9&&judge_==1){
				judge=judge+1;
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge<=9&&judge_==1){
				judge=judge+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[j]=judge+48;
				}
				else{
					last[j]=judge+48;
					judge_=0;
				}
			}
			else if(judge<=9&&judge_==0){
				last[j]=judge+48;
				judge_=0;
			}
		}
		for(i=first-second-1;i>=0;i--){
			if(judge_==0){
				last[i]=fir[i];
				judge_=0;
			}
			else if(judge_==1){
				judge=fir[i]-48+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[i]=judge+48;
				}
				else{
					judge_=0;
					last[i]=judge+48;
				}
			}
		}
		if(judge_==1){
			int li;
			li=strlen(last)+1;
			for(i=li;i>=1;i--){
				last[i]=last[i-1];
			}
			last[0]='1';
		}
		printf("%s\n",last);
	}
	else if(first<second){
		for(i=first-1,j=second-1;i>=0;j--,i--){
			judge=sec[j]-48+fir[i]-48;
			if(judge>9&&judge_==0){
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge>9&&judge_==1){
				judge=judge+1;
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge<=9&&judge_==1){
				judge=judge+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[j]=judge+48;
				}
				else{
					last[j]=judge+48;
					judge_=0;
				}
			}
			else if(judge<=9&&judge_==0){
				last[j]=judge+48;
				judge_=0;
			}
		}
		for(i=-first+second-1;i>=0;i--){
			if(judge_==0){
				last[i]=sec[i];
				judge_=0;
			}
			else if(judge_==1){
				judge=sec[i]-48+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[i]=judge+48;
				}
				else{
					judge_=0;
					last[i]=judge+48;
				}
			}
		}
		if(judge_==1){
			int li;
			li=strlen(last)+1;
			for(i=li;i>=1;i--){
				last[i]=last[i-1];
			}
			last[0]='1';
		}
		printf("%s\n",last);
	}
	else{
		for(i=second-1,j=first-1;i>=0;j--,i--){
			judge=fir[j]-48+sec[i]-48;
			if(judge>9&&judge_==0){
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge>9&&judge_==1){
				judge=judge+1;
				judge_=1;
				judge=judge%10;
				last[j]=judge+48;
			}
			else if(judge<=9&&judge_==1){
				judge=judge+1;
				if(judge>9){
					judge_=1;
					judge=judge%10;
					last[j]=judge+48;
				}
				else{
					last[j]=judge+48;
					judge_=0;
				}
			}
			else if(judge<=9&&judge_==0){
				last[j]=judge+48;
				judge_=0;
			}
		}
		if(judge_==1){
			int li;
			li=strlen(last)+1;
			for(i=li;i>=1;i--){
				last[i]=last[i-1];
			}
			last[0]='1';
		}
		printf("%s\n",last);
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值