错误代码:
bug1:
int main(int num) {
stringstream ss;
ss << num; cout << num;
string s1 = ss.str(); int timesof1 = 0;
for (auto c : s1){
if (c == '1'){
timesof1++;
}
}
//cout<< timesof1;
system("pause");
}
就以上代码,发现:当没有向控制台输入num的值时,num的值默认为1.
然后百度:
bug2:无限循环
for ( i = 1;2^i<=num ; i++){
cout << s2<<endl;
}
```
改正:
for ( i = 1;pow(2,i)<=num ; i++){
cout << s2<<endl;
}
原因:c++中^不表示幂次方,幂次方要用pow。
C++中^符号表示:这两个数的二进制按位异或运算。
bug3:
int two(int num){
//num>1
string s1("1"); string s2("1"); int i;
//2 ^ i <= num < 2 ^ (i + 1)
for ( i = 1;pow(2,i)<=num ; i++){
for (auto &c : s1){
c = c + 1;
}
s2 = s2 + s1;
s1 = s2;
} cout << s2<<endl;
int p = num - pow(2, i -1);//
int w = s2[p]-'0'; cout << w;
return w;
}
int main() {
// write your code here
int num; cin >> num;
int timesof1 ;
//num==0
if (num == 0) timesof1 = 0;
//num==1
if (num == 1) timesof1 = 1;
if (num>1)
timesof1=two(num);
//cout<< timesof1;
system("pause");
}
原因:
2147483647是2^31-1,则按照程序设定,string此时应该存有2^31-2^30=2^30位数据,LintCode说我的内存使用超过限制,但我查资料,string大小是没有限制的,而且下标是用int型存储的,最大值为2^31-1,大于string内存储数据个数,VS上运行不出来结果,没报错,但程序退出时返回值异常,不知道是不是内存泄漏之类的问题
bug4:
bug5:
原因:将负数转化为相应的正数,输入测试的时候,由于负数前面多一个为1 的符号位,所以要再加上1.