1016 部分A+B
分数 15
作者 CHEN, Yue
单位 浙江大学
输入样例 1:
3862767 6 13530293 3
输出样例 1:
399
输入样例 2:
3862767 1 13530293 8
输出样例 2:
0
我的代码(20行ac):
#include<iostream>
using namespace std;
int cnt(int x,int dx){//求数字中出现单个数字的次数
int cnt_x = 0;
while(x){
if(x%10==dx) ++cnt_x;
x /= 10;
}
return cnt_x;
}
int sum(int cnt,int dx){//求PA、PB
int sum = 0;
for(int i=0;i<cnt;++i) sum = sum*10 + dx;
return sum;
}
int main(){
int a,da,b,db; cin>>a>>da>>b>>db;
cout<<sum(cnt(a,da),da)+sum(cnt(b,db),db);
return 0;
}
我的代码——优化版(10行ac):
#include<bits/stdc++.h>
using namespace std;
int main(){
string a,b;int da,db; cin>>a>>da>>b>>db;
int sum_a = 0,sum_b = 0;
for(auto i : a) if(i==(char)(da+'0')) sum_a = sum_a*10 + da;//for(char i : a) if(i==da+'0') sum_a = sum_a*10 + da;
for(auto i : b) if(i==(char)(db+'0')) sum_b = sum_b*10 + db;
cout<<sum_a+sum_b;
return 0;
}
ps:
1.auto自动遍历:忽略长度。
(1)for(auto a:b)中b为一个容器,效果是利用a遍历并获得b容器中的每一个值,但是a无法影响到b容器中的元素。
(2)for(auto &a:b)中加了引用符号,可以对容器中的内容进行赋值,即可通过对a赋值来做到容器b的内容填充。
2.条件:if(i==(char)(da+‘0’))–string,char,int关系与类型转换。为 数据 选择合适的 数据类型 也很重要。