编程题#5:计算数组的低3位之和
来源: 北京大学在线程序评测系统POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
总时间限制: 1000ms 内存限制: 1024kB
描述
输入一个正整数构成的数组a[0], a[1], a[2], ... , a[n-1], 计算它们的二进制低3位之和。
#include <iostream> #include <vector> #include <algorithm> using namespace std; // 在此处补充你的代码 int main(int argc, char* argv[]) { int v, my_sum=0; vector<int> vec; cin>>v; while ( v ) { vec.push_back(v); cin>>v; } for_each(vec.begin(), vec.end(), CMy_add(my_sum)); cout<<my_sum<<endl; return 0; }
输入
数组a,以0表示输入结束。
输出
一个整数 , 所输入数组各元素的二进制低3位之和。
样例输入
1 3 9 7 3 6 20 15 18 17 4 8 18 0
样例输出
41
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 using namespace std; 5 // 在此处补充你的代码 6 class CMy_add { 7 private: 8 int ∑ 9 public: 10 CMy_add(int &n):sum(n) {} 11 void operator()(int x) { 12 while (x >= 8) { 13 x -= 8; 14 } 15 sum += x; 16 } 17 }; 18 int main(int argc, char* argv[]) { 19 int v, my_sum=0; 20 vector<int> vec; 21 cin>>v; 22 while ( v ) { 23 vec.push_back(v); 24 cin>>v; 25 } 26 for_each(vec.begin(), vec.end(), CMy_add(my_sum)); 27 cout<<my_sum<<endl; 28 return 0; 29 }