#include <stdio.h>
#include <math.h>
int main(void)
{
int ri,looptimes;
int i,n;
int dectobin(int n);
scanf("%d",&looptimes);
for(ri=1;ri<=looptimes;ri++){
scanf("%d",&n);
i=dectobin(n);
printf("%d\n",i);
}
}
int dectobin(int n){
int i;
int num;
num=0;
for(i=n;i>=0;i--){
if(n/pow(2,i)==1){
num=num+pow(10,i);
n=n-pow(2,i);
if(n==0)
break;
}
}
return num;
}
然后我发现不管我具体输什么数字进去,都是输出0,请教一下我哪里弄错了,谢谢啊
åè¿å¶è½¬äºè¿å¶å¯ä»¥ä½¿ç¨åºå½æ°itoaã
itoaå½æ°ååï¼char*itoa(int value,char*string,int radix);
åè½ï¼å°ä»»æç±»åçæ°å转æ¢ä¸ºå符串ãå¨<stdlib.h>ä¸ä¸ä¹æç¸ååè½çå½æ°æ¯atoiã
nt value 被转æ¢çæ´æ°ï¼char *string 转æ¢åå¨åçå符æ°ç»ï¼int radix 转æ¢è¿å¶æ°ï¼å¦2,8,10,16 è¿å¶çã
åè代ç ï¼
#include <stdio.h>#include<stdlib.h>
int main()
{
int i=10;
char a[100];
itoa(i,a,2);
printf("%s\n",a);
return 0;
}
/*
1010
*/
#include <stdio.h>
void dectobin(int n, char *po)
{
char chtmp[33]; //32 整数,使用33字节存储
int i, cnt = 0;
while (n != 0)
{
chtmp[cnt] = n % 2 + '0';
n /= 2;
cnt++; //累计位数
}
//以上字符方向是反的,现调整过来
for (i = 0; i < cnt; i++)
po[i] = chtmp[cnt - 1 - i];
po[i] = 0; //字符串结尾的 0
}
void dectobin2(int n, char *po)
{
int i, j;
unsigned int k = 0x80000000; //构造一个第 31 位是 1,其他位全为 0 的数
for (i = 0; i < 32; i++)
{
j = n & k; //取出 n 的第 31 - i 位数
if (j == 0)
po[i] = 0;
else
po[i] = 1;
k >>= 1;
}
//如果有必要,除去二进制数前面的 0
/*
for (j = 0; j < 32; j++)
{
if (po[j] == 1) break;
}
for (i = j; i < 32; i++)
{
po[i - j] = po[i];
}
po[i - j] = 0; //字符串结尾的 0
*/
}
int main()
{
int i, n = 159753; //为方便测试
//scanf("%d", &n);
char ch[33];
dectobin(n, ch);
printf("%s\n", ch);
dectobin2(n, ch);
for (i = 0; i < 32; i++)
{
printf("%d", ch[i]);
}
printf("\n");
system("pause");
return 0;
}追问
好的我等着
追答OK。两种方法,各有优劣,视情况使用。
本回答被提问者采纳int dectobin(int n,char* des){
int i=0;
int num,tmpn = n;
num=0;
do
{
for (int j = i; j > 0; j--)
{
des[j] = des[j-1];
}
des[0] = tmpn%2+'0';
i++;
tmpn /= 2;
} while (tmpn);
return num;
}
int _tmain(int argc, _TCHAR* argv[])
{
int i,n;
char tmp[1024] = {0};
printf("请输入十进制数:");
scanf("%d",&n);
i=dectobin(n,tmp);
printf("%s\n",tmp);
return 0;
}
int i;
int num;
num=0;
if(n>1023||n<1) return 0;//safe done
for(i=10;i>=0;i--){ //10 is max limit
if(n/(int)pow(2,i)==1){
num=num+(int)pow(10,i);
n=n-(int)pow(2,i);
if(n==0)
break;
}
}
return num;
}
你这个程序逻辑,最多只能支持到1023,因为你用int表达二进制,最多只能表示10个1。
C语言_010_二进制转十进制_上