本题要求自定义一个函数,求一个正整数(0~99999)最高的若干位(1-5)。
自定义left函数,有三个形参num、maxd和d,返回num的最高d位的整数;maxd是num的实际位数,如left(12345,5,2)的结果是12。
如果d的值大于maxd或小于1,函数返回-1(本题d的测试用例在一位数到五位整数之间)。
函数接口定义:
int left(int num, int maxd, int d=1);
num
是用户传入的参数,是int
值,表示要处理的正整数;
maxd
是用户传入的参数,是int
值,表示num的实际位数;
d
是用户传入的参数,是int
值,表示要取num的最高位数,只能是1-5,默认为1;
函数调用结束后得到num的最高d位的整数,如果d的值不是1-5,返回-1。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include<iostream>
#include<cmath>
using namespace std;
int nf(int num);
int left(int num, int maxd, int d=1);
int main()
{
int num,d,maxd;
cin >> num >> d;
maxd = nf(num); //求num的位数,如nf(123)的值是3,nf(1358)的值是4
cout << num << "是" << maxd << "位整数" << endl;
cout << num << "的最高位是" << left(num,maxd) << endl;
int newnum = left(num,maxd,d);
if(newnum<0 )
cout << "无高" << d << "位整数!" << endl;
else
cout << num << "的高" << d << "位是" << newnum << endl;
return 0;
}
//本函数使用循环结构语句实现求一个整数的实际位数,如调用nf(12345)的值为5
int nf(int num)
{
int n=1;
num = num>=0 ? num : -num;
while(num/10>0)
{
n++;
num /= 10;
}
return n;
}
/* 请在这里填写答案 */
输入样例1:
1234 2
输出样例1:
1234是4位整数
1234的最高位是1
1234的高2位是12
输入样例2:
1234 5
输出样例2:
1234是4位整数
1234的最高位是1
无高5位整数!
/* 请在这里填写答案 */
int left(int num, int maxd, int d)
{
if(d>maxd||d<1)return -1;
else
{
for(int i=0;i<maxd-d;i++)
{
num=num/10;
}
return num;
}
}