⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 int.cpp

📁 STL算法实现的大整数加减法的程序
💻 CPP
字号:
#include<algorithm>//STL 算法
#include<stdio.h>
#include<stdlib.h>
#include<vector>//向量
#include<iterator>//株代器
#include<iostream>

using namespace std;//使用std命名空间
//接口依次为向量,向量,向量
void add(vector<int> ZHU1,vector<int> ZHU2,vector<int> &TEMP)//加法
{
    vector<int>::iterator i,j;//株代器,用于处理数据
	int kkk,w=0;//kkk用来储存入列数据,w表示进位
    i=ZHU1.end()-1;
	j=ZHU2.end()-1;//初始化; 
	while(1){
		if(*i+*j+w>=10){//如果当前位相加大于十
			  
			  kkk=*i+*j-10+w;
			  w=1;
		}
		else {
			kkk=*i+*j+w;//否则
			w=0;
		}
		TEMP.insert(TEMP.begin(),kkk);//插入kkk到TEMP
		if(i==ZHU1.begin()&&j==ZHU2.begin()){//当i与j位于数组的首位
			if(w==1)
                TEMP.insert(TEMP.begin(),w);//且要进位,插入一
			break;//跳出循环
		}
        if(i==ZHU1.begin()){
			*i=0;//当前值置为0;
		}
		else i--;
        if(j==ZHU2.begin()){
		     *j=0;	
		}
		else j--;
		
}
}
int max(vector<int> ZHU1,vector<int> ZHU2)//求大数;
{
     vector<int>::iterator i,j;//株代器
	 i=ZHU1.begin();
	 j=ZHU2.begin();
     if(ZHU1.size()>ZHU2.size())//如果ZHU1的长度大于ZHU2,返回1
		 return 1;
	 else if(ZHU1.size()==ZHU2.size()){//长度相等时,比较下一位的大小
		 for(;i!=ZHU1.end();i++,j++){
			 if(*i>*j)
				 return 1;//若大于,返回1
			 else return 0;//否则返回0
		 }
	 }
	 else return 0;//否则返回0
            
}
//接口依次为向量,向量,向量
void dec(vector<int> ZHU1,vector<int> ZHU2,vector<int> &TEMP)//减法
{
    vector<int>::iterator i,j;//株代器
	int kkk,w=0;//kkk用来储存当前值,w是借位
	i=ZHU1.end()-1;
	j=ZHU2.end()-1;//初始化,指向末尾
	while(1){
	if(max(ZHU1,ZHU2)==1){//如果ZHU1大于ZHU2
		if(*i-*j-w<0){//并且当前位相减小于零
			kkk=10-*j+*i-w;
			w=1;//借位
		}	
		else {//否则
			kkk=*i-*j-w;
			w=0;
		}
	}
	else {//如果ZHU1小于ZHU2
        if(*j-*i-w<0){//并且当前位相减小于零
			kkk=10-*i+*j-w;
			w=1;//借位
		}	
		else{//否则
			kkk=*j-*i-w;
			w=0;
		}
	}		
		TEMP.insert(TEMP.begin(),kkk);//插入kkk
		if(i==ZHU1.begin()&&j==ZHU2.begin())
			break;//如果i,j到了头,跳出循环
        if(i==ZHU1.begin()){
			*i=0;//置零
		}
		else i--;
        if(j==ZHU2.begin()){
		     *j=0;	//置零
		}
		else j--;
	}//while
    i=TEMP.begin();
	while(1){
		if(*i!=0||TEMP.size()<=1)
			break;
		else
			TEMP.erase(i);
		i++;
	}
}//dec
 void main()//主函数
{
	ostream_iterator<int> screen(cout,"");//输出流设置
    vector<int>  zhu1,zhu2,temp;//向量
	char aa,bb,cc;
	int kk;
	cout<<"输入你要的数:";
	cout<<"例如1+1=(+,+)或1-1=(-,-)"<<endl;
	//以字符的形式输入
	while(1){

	while(1){//以加减号为截至
		scanf("%c",&aa);
		if(aa=='+'||aa=='-'){
			bb=aa;
			break;
		}
		kk=atoi(&aa);//转成int形
	    zhu1.push_back(kk);	//入列		 
	}
     while(1){//以等号结束
		scanf("%c",&aa);
		if(aa=='=')
			break;
		kk=atoi(&aa);
		zhu2.push_back(kk);//入列
	}
	 scanf("(%c,%c)",&aa,&cc);
	 break;
	}
     if(bb=='+'&&aa=='+'&&cc=='+'||bb=='-'&&aa=='+'&&cc=='-')
		 add(zhu1,zhu2,temp);
	 else if(bb=='+'&&aa=='+'&&cc=='-'||bb=='-'&&aa=='+'&&cc=='+')
		 dec(zhu1,zhu2,temp);
	 else if(bb=='+'&&aa=='-'&&cc=='+'||bb=='-'&&aa=='-'&&cc=='+')
		 dec(zhu2,zhu1,temp);
	 else if(bb=='+'&&aa=='-'&&cc=='-'||bb=='-'&&aa=='-'&&cc=='-'){
		 add(zhu1,zhu2,temp);
		 *temp.begin()=-*temp.begin(); 
	 }
	 
	 else	cout<<"请输入正负!"<<endl;
     copy(temp.begin(),temp.end(),screen);//输出TEMP
     cout<<endl;
	 system("pause");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -