Вот скаффолд для решения на C ++, которое не решает проблему, но дает вам несколько лингвистических игрушек, которые вам понадобятся для довольно простой реализации. Он перебирает цифры в обратном порядке и создает результат, который имеет только 1, где оба числа имеют ненулевые цифры, а 0 - иначе:
#include <string>
#include <iostream>
using namespace std;
// For a more circumspect treatment of the digit/char conversion, read up:
// /388338/kak-preobrazovat-odin-simvol-v-int
char charFromDigit(int d) {
return d + '0';
}
int digitFromChar(char c) {
return c - '0';
}
// all this routine does is iterate backward through the digits of both
// numbers and build up a result which has a 1 digit if both numbers are
// non-zero for that place value, and a 0 digit if they're both 0
string get_something(const string& a, const string& b) {
// get reverse ("r"begin) iterators so we can index backwards
// across the two strings. This way we look at the last digits
// first
string::const_reverse_iterator a_iterator = a.rbegin();
string::const_reverse_iterator b_iterator = b.rbegin();
// this variable holds the result that we build
string result;
// simple loop that just prints digits as long as the iterators
// haven't indicated we're out of characters by reaching their
// respective "r"ends...
while (a_iterator != a.rend() || b_iterator != b.rend()) {
int a_digit = 0;
if (a_iterator != a.rend()) {
a_digit = digitFromChar(*a_iterator);
a_iterator++;
}
int b_digit = 0;
if (b_iterator != b.rend()) {
b_digit = digitFromChar(*b_iterator);
b_iterator++;
}
cout << "A digit " << a_digit << ", B digit " << b_digit << endl;
int out_digit = 0;
if ((a_digit != 0) && (b_digit !=0))
out_digit = 1;
result.insert(result.begin(), charFromDigit(out_digit));
}
return result;
}
int main(int argc, char* argv[]) {
string a ("1000000000001");
string b ("0100000000001");
cout << "A is " << a << endl;
cout << "B is " << b << endl;
cout << "Return Value = " << get_something(a, b) << endl;
return 0;
}
Вывод программы:
A is 1000000000001
B is 0100000000001
A digit 1, B digit 1
A digit 0, B digit 0
A digit 0, B digit 0
A digit 0, B digit 0
A digit 0, B digit 0
A digit 0, B digit 0
A digit 0, B digit 0
A digit 0, B digit 0
A digit 0, B digit 0
A digit 0, B digit 0
A digit 0, B digit 0
A digit 0, B digit 1
A digit 1, B digit 0
Return Value = 0000000000001
Действительно, это имеет большое значение, если вы в классе, если вы решаете это в рамках, о которых они вас учат. Если все, что вы изучаете, это char*
и strlen()
и так далее, вы изучаете C ... не идиоматический C ++. В C ++ у вас гораздо более автоматическое управление памятью и поощрение использования более общих алгоритмических подходов.