先创建一个数组放我们确定的自除数,然后再将需要判断的数字用for,从left开始,获取它的每一位我们只需要%10再/10即可,确认后再将它放进我们创建好的数组里面:
class Solution {
public:
vector selfDividingNumbers(int left, int right)
{
vector ret;
for (int i = left; i <= right; i++)
{
int num = i;
while(num)
{
int remainder = num % 10;//计算余数
if (remainder == 0 || i % remainder)
{
break;
}
num /= 10;
}
if (num == 0)
{
ret.push_back(i);
}
}
return ret;
}
};
这里还有一道题:
238. 除自身以外数组的乘积 - 力扣(LeetCode) (leetcode-cn.com)
因为道题我觉得实在有意思,所以决定另写一篇文章,详细点进我的专栏即可看到。
day10 一、选择题 1 、求函数返回值,传入 - 1 ,则在 64 位机器上函数返回( ) int func ( int x ) { int count = 0 ; while ( x ) { count ++ ; x = x & ( x - 1 ); // 与运算 } return count ; } A: 死循环 B: 64 C: 32 D: 16 C,我们知道-1在程序中的补码是全1,而x&(x-1)则是每次运行就去掉一个1,int型一共32个,所以选C。 2 、读代码选结果( ) int count = 0 ; int x = - 1 ; while ( x ) { count ++ ; x = x >> 1 ; } printf ( "%d" , count ); A: 1 B: 2 C: 32 D: 死循环,没结果 D,这道题乍一看跟上面的很像,只不过是将&换成了>>,所以第一反应是C,但实际上将x右移会补上符号位,也就说这个x不会等于0,既然不会等于0拿while就会一直运行下去。 3 、下述赋值语句错误的是( ) A: a = (b = (c = 2 , d = 3)) B: i++ C: a/b = 2 D: a = a < a + 1C,这里一看就会发现C式子左边是一个表达式,所以不能赋值。
4 、若有 int w=1, x=2, y=3, z=4 ; 则条件表达 w < x ? w : y < z ? y : z 的值是( ) A: 1 B: 2 C: 3 D: 4 A,这里看的可能有些混乱,但如果我们加上括号 w < x ? w : (y < z ? y : z ),是不是就好理解一点? 5 、以下程序运行后的输出结果是( ) int main () { int a = 1 , b = 2 , m = 0 , n = 0 , k ; k = ( n = b < a ) && ( m = a ); printf ( "%d,%dn" , k , m ); return 0 ; } A: 0,0 B: 0,1 C: 1,0 D: 1,1 A,这里从左往右算,左边b 二、编程题 1 、写一个函数,求两个整数之和,要求在函数体内不得使用 + 、 - 、 * 、 / 四则运算符号。 数据范围:两个数都满足 0≤n≤1000 这题简直白给,我们先将两个数字直接或运算,得到它们不进位的值,再将两个数字与运算再左移1位,得到它们进位的值,再将不进位的值加上进位的值就得到最后的结果:int Add(int num1, int num2 )
{
while(num2 !=0)
{
int sum = num1^num2;
int k = (num1&num2) <<1;
num1 = sum;
num2 = k;
}
return num1;
}



