我正在编写代码来解决的问题是:
A number can be broken into different contiguous sub-subsequence parts. Suppose, a number 3245 can be broken into parts like 3 2 4 5 32 24 45 324 245. And this number is a COLORFUL number, since product of every digit of a contiguous subsequence is different. Return 1 if argument int A is a colorful number and return 0 otherwise.
我的代码如下。一切似乎都正常,除了我似乎无法获得 int result
的正确值,或者更具体地说,(int)array[k]
。对于数字 23,我得到 2 的总和为 51,2+3 的总和为 101,3 的总和为 51。这里发生了什么?我相信我的语法是正确的 (?)。
int Solution::colorful(int A) {
int result=0;
unordered_map<int,int> map1;
string s = to_string(A);
const char array = s.c_str();
int n = s.length();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
result = 0;
for (int k = i; k <=j; k++) {
result += (int)array[k];
}
if (map1.find(result) == map1.end()) {
map1.insert({result,0});
}
else {
return 0;
}
}
}
return 1;
}
编辑 - 好吧,我认为这正在发生。我得到的是字符值而不是整数值。如何将字符 2 转换为 2 的实际值?
最佳答案
用于“转换”字符值,如 '2'
到整数值 2
,您只需减去 '0'
的 ASCII 值,即 int valOfDigit = array[k] - '0'
;
请注意 atoi
或 strtod
在您的情况下将不起作用,因为这些功能需要 '\0'
- 终止“字符串”作为输入,而不是单个字符。
此外,为了确保您的输入仅包含数字,您可以检查每个 array[k]
,例如通过使用 isdigit(array[k])
或通过 (array[k] >= '0' && array[k] <= '9')
.
关于C++ : getting strange values for my character array when converting to int and adding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516669/