c语言练习73:统计位数为偶数的数字

统计位数为偶数的数字

给你⼀个整数数组 nums ,请你返回其中位数为 偶数 的数字的个数。

• ⽰例 1:

输⼊:nums = [12,345,2,6,7896]

输出:2

解释: 12 是 2 位数字(位数为偶数)

345 是 3 位数字(位数为奇数)

2 是 1 位数字(位数为奇数)

6 是 1 位数字 位数为奇数)

7896 是 4 位数字(位数为偶数)

因此只有 12 和 7896 是位数为偶数的数字

算法思路:

1. 定义⼀个变量 ans ,并将其初始化为0;

2. 遍历数组中每个数,计算当前数被10除不为0的次数,即当前数的位数;

3. 当位数为偶数时 ans 的值加⼀;

4. 返回 ans 。

解法⼀(模拟):

某个数被10相除不为0的次数即为它的位数。

代码:

int count(int num) {
	int n = 0;
	//因为题⽬中的数据为正数,所以不⽤特判0的情况,直接计算位数
	while (num) {
		n++;
		num /= 10;
	}
	return n;
}
int findNumbers(int* nums, int numsSize) {
	int i = 0;
	int ans = 0;
	//遍历数组
	for (i = 0; i < numsSize; i++) {
		//如果位数是2的倍数,则位数为偶数,记录次数
		if (count(nums[i]) % 2 == 0) {
			ans++;
		}
	}
	//返回答案
	return ans;
}

解法⼆(sprintf()函数):

利⽤ sprintf 函数将数字转化为字符串形式,则字符串⻓度即为数字位数。

• sprintf函数: sprintf函数是⼀个C标准库函数,⽤于将格式化的数据写⼊⼀个字符串中。它的函数原型为:

int sprintf(char *str, const char *format, ...);

其中,第⼀个参数str是⼀个字符指针,指向⽤于存储输出的字符数组,第⼆个参数format是⼀个字 符串,包含要写⼊字符数组的⽂本和格式控制字符,后⾯的省略号表⽰可选的参数,⽤于填充格式控 制字符中的占位符。

sprintf函数的⼯作⽅式类似于printf函数,不同之处在于它将输出写⼊到⼀个字符串中⽽不是标准输 出。它返回写⼊到字符数组中的字符数,不包括字符串的结尾空字符'\0'。如果出现错误,则返回负 数。

• 求字符串 str ⻓度:字符串函数strlen: 字符串str⻓度=strlen(str)。

算法思路:

1. 定义⼀个变量 ans ,将其初始化为0;

2. 定义⼀个字符串数组 arr ;

3. 遍历原数组,将当前数字利⽤ sprintf 函数转化为字符串形式放⼊字符串数组;

4. 求字符串⻓度,当⻓度为偶数时 ans 的值加⼀;

5. 返回 ans 。

c语言练习73:统计位数为偶数的数字_第1张图片

代码:

int findNumbers(int* nums, int numsSize) {
	int i = 0;
	int ans = 0;
	//定义字符串数组⽤来存放转化后的字符串
	char arr[7] ;
	for (i = 0; i < numsSize; i++) {
		//将数字转化为字符串
		sprintf(arr, "%d", nums[i]);
		//字符串⻓度为偶数,即当前数字位数为偶数时记录⼀次
		if (strlen(arr) % 2 == 0) {
			ans++;
		}
	}
	//返回答案
	return ans;
}

你可能感兴趣的:(c语言,算法,数据结构)