C, 如何提取一个数(int)的最高几位?

用c语言实现.传入参数 int num , int k返回结果 int n , int m要求,把num中的最高k位提取出来,并保存到n中,并把剩下的位保存到m中.【希望可以用纯算术运算得出结果】.(【即不可以把num转为字符串,然后提取,只能用加减乘除等算术运算】.)比如,num=123456 , k=1 则 n=1 m=23456num=123456 , k=2 则 n=12 m=3456num=456 , k=2 则 n=45 m=6

int temp = num;
int count = 1;
int res1 = 0,res2 =0;
while(temp / 10 != k -1){
temp = temp/10;
count *= 10;
}
res1 =temp;
res2 = num - res1 *count;
printf("k = %d, n = %d, m = %s",k,res1,res2);

//大致思路了,具体值对不对还要compile下,楼主试试吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-09
#include <stdio.h>

void fun(int num, int k, int *n, int *m)
{
int t = num, c = 0;
do
{
c++;
} while(t /= 10);
for(t = 10 , c -= k; --c; t *= 10);
*n = num / t;
*m = num % t;
}

int main()
{
int num, k, n, m;
printf("input num,k:\n");
while(scanf("%d", &num), num) /*输入0结束循环*/
{
scanf("%d", &k);
fun(num, k, &n, &m);
printf("n=%d,m=%d\n", n, m);
}
return 0;
}本回答被网友采纳
第2个回答  2013-12-09
#include<stdio.h>
long a,k,n,m,i,j,x,y;
main()
{
scanf("%ld%ld",&a,&k);
x=y=1;
for(i=1;i<=k;i++)y*=10;
x=y/10;
n=a;j=1;
while(n>=y){n/=10;j*=10;}
m=a-n*j;
printf("n=%ld m=%ld",n,m);
}
第3个回答  2013-12-09
void fun(int nNum, int nK, int &nN, int &nM)
{
int nTemp = pow(10, nK);
nN = nNum/nTemp;
nM = nNum%nTemp;
}
相似回答