函数,实现int类型截取任意位数

求一个函数,实现int类型截取任意位数。
本帖最后由 CKRGD 于 2015-08-31 15:53:53 编辑
如题例如:

int get_num(int num,int a, int b)
{//a表示从哪一位算起(1从个位算,2从十位算,3从百位算),b表示截取多少位
//例如:传入参数1234567,1,3
int new_num = 567;//怎样求得new_num = 567;
//return new_num ;
}


求函数实现
------解决思路----------------------

#include <math.h>
int get_num(int num,int a, int b)
{
int low,high;
low = high = 0;
low = pow(10., a - 1);
high = pow(10., b);
num /= low;
num%= high;
return num;
}

------解决思路----------------------

int get_num(int num,int a, int b)
{
    return num / (int)pow(10.0, a - 1) % (int)pow(10.0, b - a + 1);
}

------解决思路----------------------
int get_num(int num, int a, int b){
int k = 1;
while(--a)num /= 10;
while(b--)k *= 10;
return num % k;
}


也可以参照@西伯利亚冰 不要要注意四舍五入(不可直接用int取整),所以其代码要修改为:
int get_num(int num,int a, int b){
    return num / int(pow(10.0, a-1) + .5)
% int(pow(10.0, b-a+1) + .5);
}
// int(x + .5)可以实现对x四舍五入。

------解决思路----------------------

#include <stdio.h>
#include <math.h>

int oct_power(int n)
{
    int value = 1;
    int i;

    for(i = 0; i < n; i++)
    {
        value *= 10;
    }

    return value;
}

int get_num(int num, int a, int b)
{
    int new_num = num;

    new_num /= oct_power(a - 1);
    new_num %= oct_power(a - 1 + b);

    return new_num;
}

int main(int argc, char* argv[])
{
    printf("%d\n", get_num(1234567, 1, 3));
    printf("%d\n", get_num(1234567, 3, 3));
    printf("%d\n", get_num(1234567, 5, 2));

    return 0;
}

------解决思路----------------------
#include<stdio.h>
#include<math.h>
int check_num(int num, int a, int b){
int length = 0;
if(a <= 0 
------解决思路----------------------
 b <= 0){
return -1;
}
while(++length){
if(num < pow(10, length)){
break;
};
}
if(a + b - 1 > length){
return -1;
}
return 0;
}

int get_num(int num,int a,int b){
return num % (int)pow(10, a + b -1) / (int)pow(10, a - 1);
}

int main(){
int num = 1234567;
int x = 4;
int y = 3;
if(check_num(num, x, y) != 0){
printf("ERROR!\n");
return -1;
}
int result = get_num(num, x, y);
printf("result=%d\n",result);
return 0;
}