//写出一个递归函数,输入一个非负整数,返回组成它的数字之和,例如,输入123,应该返回1+2+3,输出6
int FuncSum(int n)
{
if (n < 10)
{
return n;
}
return n % 10 + FuncSum(n / 10);
}
int main(void)
{
printf("%d\n", FuncSum(123));//6
return 0;
}下面是这个代码的执行逻辑。

void print(int n)
{
if (n < 10)
{
printf("%d", n);
}
else
{
print(n / 10);
printf("%d", n % 10);
}
}
int main(void)
{
print(123);
return 0;
}下面是代码的执行逻辑:

描述:输入两个整数,求两个整数二进制格式有多少个位不同。
#include<stdio.h>
int FuncBit(int m, int n)
{
int tmp = m ^ n;
int count = 0;
while (tmp != 0)
{
count++;
tmp = tmp & (tmp - 1);
}
return count;
}
int main(void)
{
int a, b;
while (scanf("%d %d", &a, &b) != EOF)
{
int ret = FuncBit(a, b);
printf("%d\n", ret);
}
return 0;
}这个代码解释如下:
要求两个数字的二进制有几位是不一样的,这里我们给两个数字:12和6
12的二进制是0000 1100
6的二进制是0000 0110 看来只有两位是不一样的,那么这里可以用到异或^

//找不同
#include<stdio.h>
int main(void)
{
int arr[] = { 1,2,3,2,1 };
int len = sizeof(arr) / sizeof(arr[0]);
int sum = 0;
for (int i = 0; i < len; i++)
{
sum ^= arr[i];
// 0^1^2^3^2^1
}
printf("%d\n", sum);//3
return 0;
}解释代码:1和2都是成对出现的,如果要找出单个的3,就要用异或^
1^1 2^2 0^3
0001 0010 0000
0001 0010 0011
0000 1和1异或的结果 0000 2和2异或的结果 0011 0和3异或的结果
所以任何数字跟它本身异或,得到的值是0,跟0异或,得到的值是它本身。
这里把所有数字都进行异或,最终就会得到单身数字本身的值。

#include<stdio.h>
void func2(int n)
{
//1.打印偶数位
for (int i = 31; i >= 1; i -= 2)
{
printf("%d", (n >> i) & 1);
}
printf("\n");
//2.打印奇数位
for (int i = 30; i >= 0; i -= 2)
{
printf("%d", (n >> i) & 1);
}
}
int main(void)
{
func2(7);
}
#include<stdio.h>
int main(void)
{
int n = 5;
int a = 2;
int tmp = 0;
int sum = 0;
for (int i = 0; i < n; i++)
{
tmp = tmp * 10 + a;
sum += tmp;
}
printf("%d\n", sum);
return 0;
}#include<stdio.h>
#include<math.h>
int main(void)
{
for (int i = 0; i <= 100000; i++)
{ //1.如何求一个数字有多少位
int count = 0;
int tmp = i;
while (tmp != 0)
{
count++;
tmp /= 10;
}
//2.如何求一个数字的每一位
tmp = i;
int sum = 0;
while (tmp != 0)
{
sum += pow(tmp % 10, count);
tmp /= 10;
}
if (sum == i)
{
printf("%d\n", i);
}
}
return 0;
}

上面5块钱可以喝9瓶可乐,还剩下一个空瓶子。用total表示所有可以换来的可乐,不管是money(钱 )还是empty(空瓶子)。可以进行多次画图,6块钱可以喝到11瓶可乐,7块钱喝到13瓶可乐,找规律,total=2*money -1。
#include<stdio.h>
int main(void)
{
int money;
scanf("%d", &money);
int total;
if (money <= 0)
{
printf("喝西北风\n");
}
else
{
total = 2 * money - 1;
printf("%d\n", total);
}
return 0;
}