我正在尝试将5位数的zipcode转换为27位数的条形码(由0和1组成),反之亦然。条形码的第一个和最后一个数字始终为1.删除这些数字会保留25位数字。分为5位数,从左到右,数字编码值为7,4,2,1,0。如果乘以相应的数字并计算总和,我们可以获得第一个邮政编码。例如,25位数的条形码是10100 10100 01010 11000 01001,邮政编码是99504.
1 x 7 = 7
0 x 4 = 0
1 x 2 = 2
0 x 1 = 0
0 x 0 = 0
sum = 9
#app/views/profiles/index.html.erb
<% @profiles.in_groups_of(3) do |group| %>
<% group.each do |profile| %>
<%= link_to "#{profile.user.first_name} #{profile.user.last_name}" %>
<% end %>
<% end %>
现在我的问题是:在// main.cpp
#include <iostream>
#include <iomanip>
#include "ZipCode.h"
using namespace std;
int main()
{
ZipCode zip1(99504);
ZipCode zip2(12345);
ZipCode zip3(67890);
ZipCode zip4("100101010011100001100110001");
ZipCode zip5("110100001011100001100010011");
ZipCode zip6("100011000110101000011100101");
cout << "Digits" << " " << "Bar Code" << endl;
cout << zip1.getZipCode() << setw(35) << zip1.getBarCode() << endl;
cout << zip2.getZipCode() << setw(35) << zip2.getBarCode() << endl;
cout << zip3.getZipCode() << setw(35) << zip3.getBarCode() << endl;
cout << endl;
cout << zip4.getZipCode() << setw(35) << zip4.getBarCode() << endl;
cout << zip5.getZipCode() << setw(35) << zip5.getBarCode() << endl;
cout << zip6.getZipCode() << setw(35) << zip6.getBarCode() << endl;
return 0;
}
中,如何比较每个整数值并评估为条形码?例如,在getZipCode(int num){}
中,它显示为main()
。由于99504是一个整数,如何评估9到条形码,然后评估下一个,依此类推?
答案 0 :(得分:0)
您可以执行以下操作:
std::string to_bar_code(unsigned int zip_code)
{
const std::array<std::string, 10> digit {{
"11000", "00011", "00101", "00110", "01001",
"01010", "01100", "10001", "10010", "10100"
}};
return "1"
+ digit[(zip_code / 10000) % 10]
+ digit[(zip_code / 1000) % 10]
+ digit[(zip_code / 100) % 10]
+ digit[(zip_code / 10) % 10]
+ digit[zip_code % 10]
+ "1";
}
int to_zip_code(const std::string& bar_code)
{
const std::map<std::string, int> digits = {
{"11000", 0}, // special case
{"00011", 1},
{"00101", 2},
{"00110", 3},
{"01001", 4},
{"01010", 5},
{"01100", 6},
{"10001", 7},
{"10010", 8},
{"10100", 9}
};
const std::string bar_digits[5]{
{bar_code, 1, 5},
{bar_code, 6, 5},
{bar_code, 11, 5},
{bar_code, 16, 5},
{bar_code, 21, 5}
};
unsigned int res = 0;
for (const auto& d : bar_digits)
{
res *= 10;
res += digits.at(d);
}
return res;
}