读书人

求教中科院的上机题1,该如何解决

发布时间: 2012-04-22 18:34:46 作者: rapoo

求教中科院的上机题1
现把中科院2011的上机题列出,希望大牛能给出完整解答!

求一个整数变换成二进制后去掉尾零后在变换成整数的函数

[解决办法]

C/C++ code
#include <iostream>#include <math.h>using namespace std;int printn(int n){    static char *ntab = "01";    static char pcPut[128] = {0};    bool bRet = false;    int a, m=0,i=0,j=0;    while(a = n / 2){        pcPut[m] = n % 2;        n = a;        m++;    }    pcPut[m] = n % 2;    a=0;    for (i = 0;i <= m;i++)    {        if(!bRet && ntab[pcPut[i]]=='0')            continue;        bRet = true;        a+=(ntab[pcPut[i]]-'0')<<j;        j++;    }    return a;}void main(){    int a=printn(100);    printf("a=%d",a);}//
[解决办法]
#include<stdio.h>
#include<math.h>

int main()
{
char s[128];
int i,j,k,n,len,sum;

scanf("%d",&n);
i=0;
do{
s[i++]=n%2+'0';
}while(n=n/2);
s[i]='\0';
len=i;
for(i=0;s[i]!='\0';i++)
if(s[i]!='0')
break;
for(j=i,sum=0;s[j]!='\0';j++)
sum+=(int)(s[j]-'0')*pow(2,j-i);
printf("%d\n",sum);
return 0;
}

读书人网 >C语言

热点推荐