解释为什么报错#include <iostream> #include <vector> #include <cmath> using namespace std; int main() { int n=0; int n1=n; cin>>n; int num[10]={0}; for(int i=0;pow(10,i)<n1;i++) { while(num[n%10]==0) { num[n%10]=1; cout<<n%10; } n=n/10; } return 0; }
时间: 2023-12-14 16:37:05 浏览: 264
使用include <iostream>时一定要加using namespace std
这段代码存在几个问题:
1. 在定义 `n1` 时,`n` 还未被赋值,所以 `n1` 的值为 0,导致后面的循环条件一直为假,不会执行循环体。
2. 在循环中,用 `pow(10, i)` 来判断是否超过了输入的数值,但是 `pow` 函数返回的是浮点数,可能存在精度问题,导致循环条件不正确。可以使用 `while(n > 0)` 作为循环条件,每次取最后一位数字并削掉该位。
3. 数组 `num` 的长度为 10,但是在循环中并没有对数字进行限制,可能会出现数组越界的情况。可以使用 `bool` 类型的数组代替 `int` 类型的数组,只存储数字是否出现过即可。
下面是修改后的代码:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main() {
int n = 0;
cin >> n;
int num[10] = {0};
while (n > 0) {
int digit = n % 10;
if (num[digit] == 0) {
num[digit] = 1;
cout << digit;
}
n /= 10;
}
return 0;
}
```
这个代码可以输出输入数字中每个不同的数字,例如输入 123321,输出 123。
阅读全文