满分代码:
#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];
}
}