C语言案例 | 求数字的低n-1位的数

117 阅读1分钟

读前福利:几百本互联网技术书籍送给大家 www.keketec.club/posts/77172…


1 题目

函数:unsigned fun(unsigned w)

功能:求数字的低n-1位的数

描述:w 是一个大于10的无符号整数,若 w 是 n(n>=2)位的整数,函数求出来w的低n-1位的数作为函数值返回

举例:w 值为5923,则函数返回 923

2 思路

两步走:

  1. 先判断当前无符号整数的位数,记录位数*10。例如:如果有三位,那么记录time=100
  2. 根据time计算后 n-1 位,即:w-((w/time)*time)

3 代码

#include <stdio.h> 
#include <stdlib.h>

/**
函数:unsigned fun(unsigned w)
功能:求数字的低n-1位的数
描述:w 是一个大于10的无符号整数,若 w 是 n(n>=2)位的整数,函数求出来w的低n-1位的数作为函数值返回
举例:w 值为5923,则函数返回 923
**/

unsigned fun(unsigned w) {
	// 先判断数字的位数
	int temp_w = w;
	int time = 1;   // 位数10的指数次
	while(temp_w > 0) {
		time*=10;
		temp_w = temp_w/10;
	}
	time = time/10;
	// 计算返回
	return w-((w/time)*time);
}


int main(int argc, char const *argv[]) {
	int w;
	printf("请一个大于10的无符号整数:");
	scanf("%d", &w);
	printf("无符号整数低n-1位的数为:%d\n", fun(w));
}

示例结果:

$ gcc ex007.c -o demo
$ ./demo
请一个大于10的无符号整数:12345
无符号整数低n-1位的数为:2345
$ ./demo
请一个大于10的无符号整数:765432
无符号整数低n-1位的数为:65432