1074 宇宙无敌加法器

满分代码: 

#include<bits/stdc++.h>
using namespace std;
string a,b,c;
bool flag = true;
int main(){
	cin>>a;
	cin>>b;
	cin>>c;
	vector<int> v,v1,v2,result;
	for(int i=a.length()-1;i>=0;i--){
		v.push_back(a[i]-'0');
	} 
	for(int i=b.length()-1;i>=0;i--){
		v1.push_back(b[i]-'0');
	}
	for(int i=c.length()-1;i>=0;i--){
		v2.push_back(c[i]-'0');
	}
	int num,sum=0,k=0,jinwei=0;
	for(int i=0,j=0;i<v1.size()||j<v2.size();i++,j++){
		if(i<v1.size()&&j<v2.size())
			num = v1[i]+v2[j];
		else if(i<v1.size())
			num = v1[i];
		else if(j<v2.size())
		 	num = v2[j];
		if(v[k]!=0){
			sum=((num+jinwei)%v[k]);
			jinwei=(num+jinwei)/v[k];
			k++;
		}
		else if(v[k]==0){
			sum=(num+jinwei)%10;
			jinwei=(num+jinwei)/10;
			k++;
		}
		result.push_back(sum);
		if((i==v.size()-1||j==v.size()-1)&&(jinwei!=0)){
			result.push_back(jinwei);
		}
	}
	for(int i=result.size()-1;i>=0;i--){
		if(result[i]!=0||!flag){
			flag = false;
			cout<<result[i];
		}
		
	}	
	if(flag)
		cout<<"0";
}

这道题我有一个疑问,就是我用下面方法去除前导0,扣了4分,但是各种测试样例都能通过,不知道为什么???

思路是:在第一行给出一个 N 位的进制表后,随后两行,每行给出一个不超过 N 位的非负的 PAT 数,这两个PAT数输入时是int类型,然后我再to_string()装换成string类型处理,我想通过这个方式直接去除这两个PAT数的前导0,后续就不用再进行处理。目的确实达成了,各种测试用例都能通过,包括最后要输出一个0的任何情况,但还是扣了4分。

下面是16分(扣了4分)的代码:

#include<bits/stdc++.h>
using namespace std;
int x2,x3;
string a,b,c;
int main(){
	cin>>a;
	cin>>x2;
	cin>>x3;
	b = to_string(x2);
	c = to_string(x3);
	//cout<<"b: "<<b<<endl;
	//cout<<"c: "<<c<<endl;
	vector<int> v,v1,v2,result;
	for(int i=a.length()-1;i>=0;i--){
		v.push_back(a[i]-'0');
	} 
	for(int i=b.length()-1;i>=0;i--){
		v1.push_back(b[i]-'0');
	}
	for(int i=c.length()-1;i>=0;i--){
		v2.push_back(c[i]-'0');
	}
	int num,sum=0,k=0,jinwei=0;
	for(int i=0,j=0;i<v1.size()||j<v2.size();i++,j++){
		if(i<v1.size()&&j<v2.size())
			num = v1[i]+v2[j];
		else if(i<v1.size())
			num = v1[i];
		else if(j<v2.size())
		 	num = v2[j];
		if(v[k]!=0){
			sum=((num+jinwei)%v[k]);
			jinwei=(num+jinwei)/v[k];
			k++;
		}
		else if(v[k]==0){
			sum=(num+jinwei)%10;
			jinwei=(num+jinwei)/10;
			k++;
		}
		result.push_back(sum);
		if((i==v.size()-1||j==v.size()-1)&&(jinwei!=0)){
			result.push_back(jinwei);
		}
	}
	for(int i=result.size()-1;i>=0;i--){
		cout<<result[i];		
	}	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值