我编写要解决的代码的问题是:
可以将数字分解为不同的连续子子序列 部分。假设,数字3245可以分成3 2 4 5等部分 32 24 45 324 245.这个数字是一个很奇怪的数字,因为产品 连续子序列的每个数字都是不同的。如果返回1 参数int A是一个彩色数字,否则返回0.
我的代码如下。一切似乎都在起作用,除非我似乎无法获得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?
答案 0 :(得分:3)
对于&#34;转换&#34;像'2'
这样的字符值为整数值2
,您只需减去'0'
的ASCII值,即int valOfDigit = array[k] - '0'
;
请注意atoi
或strtod
在您的情况下不起作用,因为这些函数需要'\0'
- 终止&#34;字符串&#34;作为输入,而不是单个字符。
此外,为了确保您的输入仅包含数字,您可以检查每个array[k]
,例如使用isdigit(array[k])
或(array[k] >= '0' && array[k] <= '9')
。
答案 1 :(得分:0)
您可以使用atoi()将char *
字符串转换为int。别忘了#include <stdlib.h>
。
答案 2 :(得分:-2)
或者只使用如下所示的int cast:(int)