c++取一个整数a从右端开始的4~7位。(注意考虑多种情况)
1. 思路分析及原理
-
4 ~ 7位的范围是10 ^ 3 ~ 10 ^ 7 – 1,我们可以利用这个来判断数字的长度。
-
从右端截取一个整数的4~7位,我们需要考虑三种情况:
-
数字的长度不够4位:
提示用户:长度不够,请重新输入 -
数字的长度大于7位:
用取余运算符去掉数字第7位以上的部分,只留下7位 -
是负数
一开始判断是否是负数,如果是做个标记并把数字转成正数,按正常的流程处理完后最后输出之前将数字转负数。
-
关键代码:一个整数整除(/)10 ^ n可以去掉右端的n位,一个整数除以10 ^ n取余(%)可以去掉左端的n位。
-
最后我们只需要去掉整数的右端3位后输出即可,因为走过以上的步骤后该整数的位数一定是4 ~ 7之间。
![在这里插入图片描述](https://img-blog.csdnimg.cn/109b3045fe2848ef88e716101091fa3c.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQUnpuqXniL4=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
2. 正确代码
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n, min = 4, max = 7;
bool sign = false;
userInput:
cin >> n;
if(n < 0){
sign = !sign;
n *= (-1);
}
if(n < pow(10, min -1)){
cout << "[Warning]: The length is less than minimum, please try again\n";
goto userInput;
} else if(n >= pow(10, max) - 1){
n = n % (int)pow(10, max);
}
if(sign) {
n *= (-1);
}
cout << n / (int)pow(10, min -1);
}
3. 运行截图
![在这里插入图片描述](https://img-blog.csdnimg.cn/81586f66718b46a7b6d397eada2fa3af.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAQUnpuqXniL4=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)