首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言编程题(1)

C语言编程题(1)

作者头像
胖咕噜的稞达鸭
发布2025-10-22 14:46:19
发布2025-10-22 14:46:19
8900
代码可运行
举报
文章被收录于专栏:C++初阶高阶C++初阶高阶
运行总次数:0
代码可运行

1.写出一个递归函数,输入一个非负整数,返回组成它的数字之和,例如,输入123,应该返回1+2+3,输出6

代码语言:javascript
代码运行次数:0
运行
复制
//写出一个递归函数,输入一个非负整数,返回组成它的数字之和,例如,输入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;
}

下面是这个代码的执行逻辑。

 2.打印一个数字的每一位(递归方式实现打印一个整数的每一位)

代码语言:javascript
代码运行次数: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;
}

下面是代码的执行逻辑:

 3.两个整数二进制位不同个数

描述:输入两个整数,求两个整数二进制格式有多少个位不同。

代码语言:javascript
代码运行次数: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                        看来只有两位是不一样的,那么这里可以用到异或^

 4.单身狗问题

代码语言:javascript
代码运行次数:0
运行
复制
//找不同
#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异或,得到的值是它本身。

这里把所有数字都进行异或,最终就会得到单身数字本身的值。

5.打印整数二进制的奇数位和偶数位,获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列

代码语言:javascript
代码运行次数: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);
}

6.求Sn=a+aa+aaa+aaaa+aaaaa的前五项之和,其中a是一个数字,例如2+22+222+2222+22222.

代码语言:javascript
代码运行次数:0
运行
复制
#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;
}

7.打印水仙花数

 求出0~100000之间的所有水仙花数并输出,水仙花数就是指一个n位数字,其各位数字的n次方之和刚好等于该数本身,如:153=1^3+5^3+3^3,则这个数字就是水仙花数。
代码语言:javascript
代码运行次数: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;
}

8. 如果一瓶可乐1块钱,喝完两瓶可乐的空瓶子可以换一瓶可乐,用代码实现这个问题。

上面5块钱可以喝9瓶可乐,还剩下一个空瓶子。用total表示所有可以换来的可乐,不管是money(钱 )还是empty(空瓶子)。可以进行多次画图,6块钱可以喝到11瓶可乐,7块钱喝到13瓶可乐,找规律,total=2*money -1。

代码语言:javascript
代码运行次数:0
运行
复制
#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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.写出一个递归函数,输入一个非负整数,返回组成它的数字之和,例如,输入123,应该返回1+2+3,输出6
  •  2.打印一个数字的每一位(递归方式实现打印一个整数的每一位)
  •  3.两个整数二进制位不同个数
  •  4.单身狗问题
  • 5.打印整数二进制的奇数位和偶数位,获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
  • 6.求Sn=a+aa+aaa+aaaa+aaaaa的前五项之和,其中a是一个数字,例如2+22+222+2222+22222.
  • 7.打印水仙花数
    •  求出0~100000之间的所有水仙花数并输出,水仙花数就是指一个n位数字,其各位数字的n次方之和刚好等于该数本身,如:153=1^3+5^3+3^3,则这个数字就是水仙花数。
  • 8. 如果一瓶可乐1块钱,喝完两瓶可乐的空瓶子可以换一瓶可乐,用代码实现这个问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档