c语言二进制转十进制大小,大数的十进制转换成二进制(C语言)

题目1138:进制转换

题目描述:

将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

输入:

多组数据,每行为一个长度不超过30位的十进制非负整数。

(注意是10进制数字的个数可能有30个,而非30bits的整数)

输出:

每行输出对应的二进制数。

样例输入:

0

1

3

8

样例输出:

0

1

11

1000

#include

#include

#define false 0

#define true 1

char src[40];

int tar[100];

int cha=0;

int lenof(char tar[])

{

int i=0;

int len=0;

while(tar[i]!='\0') {

i++;

len++;

}

return len;

}

int isZero(char src[])

{

int i;

for ( i=lenof(src)-1; i>=0; i--) {

if (src[i] != '0') {

return false;

}

}

return true;

}

void ToBin(char src[])

{

int i=0;

int j=0;

int len=lenof(src);

while(!isZero(src)) {

int temp=0;

int yu=0;

for(i=0; i

if(i==len-1) {

temp = (yu*10 + (src[i]-'0'))/2 ;

yu=(yu*10 + (src[i]-'0'))%2;

src[i]= '0'+temp;

tar[j]=yu;

j++;

} else {

temp = (yu*10 + (src[i]-'0'))/2 ;

yu=(yu*10 + (src[i]-'0'))%2;

src[i]='0'+temp;

}

}

}

cha=j;

}

int main()

{

int i=0;

memset(tar,0,sizeof(tar));

while(scanf("%s",src)!=EOF) {

if(isZero(src)) printf("0");

else {

ToBin(src);

for(i=cha-1; i>=0; i--) {

printf("%d",tar[i]);

}

}

printf("\n");

cha=0;

}

return 0;

}

附上网上看到的别人的C++代码

#include

#include

#include

#include

using namespace std;

char binvec[1001];

void tenToBin(string str)

{

int j=0;

int sum=1;

int len=str.size();

while (sum) {

sum=0;

for (int i=0; i

int temp=(str[i]-'0')/2;

sum+=temp;

if (i==len-1) {

binvec[j++]=(str[i]-'0')%2+'0';

} else {

str[i+1]=str[i+1]+(str[i]-'0')%2*10;//算出下一个被除数

}

//记录该次得出的商

str[i]=temp+'0';

}

}

}

void resout()

{

//逆序

int len1=strlen(binvec);

for (int i=0,j=len1-1; i

char temp=binvec[j];

binvec[j]=binvec[i];

binvec[i]=temp;

}

cout<

}

int main()

{

string str;

while(cin>>str) {

memset(binvec,'\0',sizeof(binvec));

tenToBin(str);

resout();

}

return 0;

}

你可能感兴趣的:(c语言二进制转十进制大小)