按照要求编写C++代码:题目描述摘要:string subtract(const string& a, const string& b, int N) {
实现一个基于字符串的N进制的减法
需要对输入的两个字符串按照给定的N进制进行减法操作
输出正负符号和表示结果的字符串
输入描述
输入三个参数
第一个参数是整数形式的进制N值
N值范围大小为 2 第二个参数为被减数字符串
第三个参数为减数字符串
有效的字符包括0~9以及小写字母a~z
字符串有效字符个数最大为100个字符
另外还有结尾的\0
限制:输入的被减数和减数除了单独的0以外 不能是以0开头的字符串
如果输入有异常或计算过程中有异常 此时应当输出-1表示错误
输出描述
结果是两个
第一个是减法计算的结果
-1表示出错 0表示结果为整数 1表示结果为负数
其二为表示结果的字符串
示例一
输入
2 11 1
输出
0 10
说明
按二进制11-1计算正常
0表示符号为正数,结果为10
示例二
输入
8 07 1
输出
-1
说明
按8进制检查的减数不符合非零前导的要求,返回结果为-1
没有其他结果内容
#include
#include
#include
#include
using namespace std;
int charToValue(char c) {
if (isdigit(c)) {
return c - '0';
} else {
return 10 + (c - 'a');
}
}
char valueToChar(int v) {
if (v return '0' + v;
} else {
return 'a' + (v - 10);
}
}
bool isValidNumber(const string& s, int N) {
if (s.empty) return false;
if (s.size > 1 && s == '0') return false;
for (char c : s) {
int val;
if (isdigit(c)) {
val = c - '0';
} else if (islower(c)) {
val = 10 + (c - 'a');
} else {
return false;
}
if (val >= N) {
return false;
}
}
return true;
}
bool compareStrings(const string& a, const string& b) {
if (a.size != b.size) {
return a.size > b.size;
}
for (int i = 0; i int va = charToValue(a );
int vb = charToValue(b );
if (va != vb) {
return va > vb;
}
}
return true;
}
string subtract(const string& a, const string& b, int N) {
vectora_digits, b_digits;
for (char c : a) {
a_digits.push_back(charToValue(c));
}
reverse(a_digits.begin, a_digits.end);
for (char c : b) {
b_digits.push_back(charToValue(c));
}
reverse(b_digits.begin, b_digits.end);
vectorresult;
int borrow = 0;
for (int i = 0; i int ai = (i int bi = (i int diff = ai - bi - borrow;
if (diff diff += N;
borrow = 1;
} else {
borrow = 0;
}
result.push_back(diff);
}
reverse(result.begin, result.end);
int start = 0;
while (start ++start;
}
if (start >= result.size) {
return "0";
}
string res;
for (int i = start; i res += valueToChar(result );
}
return res;
}
int main {
int N;
string a, b;
cin >> N >> a >> b;
if (N 35) {
cout return 0;
}
if (!isValidNumber(a, N) || !isValidNumber(b, N)) {
cout return 0;
}
bool a_ge_b = compareStrings(a, b);
int sign = a_ge_b ? 0 : 1;
string abs_res;
if (a_ge_b) {
abs_res = subtract(a, b, N);
} else {
abs_res = subtract(b, a, N);
}
if (abs_res.empty) {
cout return 0;
}
cout return 0;
}
来源:小辰科技观察