试题 入门训练 A+B问题


题很简单,我就补充一下大数加减吧
大数加(仅当两个数都为正数时,都为负数可另加条件,只有一个为负数可参考大数减)

#include<iostream>
using namespace std;
long long  n,m,p1[20],p2[20],p3[20],la=0,lb=0,maxl;
void fn1(long long a,long long b){
	while(a!=0){
		p1[la]=a%10;
		a/=10; la++;
	}
	while(b!=0){
		p2[lb]=b%10;
		b/=10; lb++;
	}
	maxl=max(la,lb);//以最长的为界限 
	int na=0,nx;
	for(int i=0;i<maxl;i++){
		nx=p1[i]+p2[i]+na;
		p3[i]=nx%10; na=nx/10;
	}
	if(na!=0){
		p3[maxl]=na; maxl++;
	}
}
int main(){
	cin>>n>>m;
	fn1(n,m);
	int y=0;
	for(int i=maxl;i>=0;i--){
		if(p3[i]!=0) y=1;
		if(y) cout<<p3[i];
	}cout<<endl;//代码有点冗余,之前的复制过来的懒得改 
	return 0;
}

大数减

#include<iostream>
using namespace std;
long long  n,m,p1[20],p2[20],p3[20],la=0,lb=0,maxl;
void fn1(long long a,long long b){
	while(a!=0){
		p1[la]=a%10;
		a/=10; la++;
	}
	while(b!=0){
		p2[lb]=b%10;
		b/=10; lb++;
	}
	maxl=max(la,lb);//以最长的为界限 
	int na=0,nx;
	for(int i=0;i<maxl;i++){
		nx=p1[i]-p2[i]+na;
		if(nx<0){
			nx+=10;
			na=-1;
		}else{
			na=0;
		}
		p3[i]=nx;
	}
}
int main(){
	cin>>n>>m;
	if(n<m) swap(n,m);  //此处默认n>m 
	fn1(n,m);
	int y=0;
	for(int i=maxl;i>=0;i--){
		if(p3[i]!=0) y=1;
		if(y) cout<<p3[i];
	}cout<<endl;//代码有点冗余,之前的复制过来的懒得改 
	return 0;
}
posted @ 2020-10-05 22:11  kidfff  阅读(135)  评论(0)    收藏  举报