求教中科院的上机题1
现把中科院2011的上机题列出,希望大牛能给出完整解答!
求一个整数变换成二进制后去掉尾零后在变换成整数的函数
[解决办法]
#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;
}