2 回答
TA贡献1805条经验 获得超10个赞
少了个i--;
i--;
while(i>=0){printf("%d",s[i]);i--;}
你多输出了一个数
加上i--后结果对 了
#include <stdio.h>
void tentotwo(int a);
int main()
{
int a;
scanf("%d",&a);
tentotwo(a);
getchar();
getchar();
}
void tentotwo(int a)
{int s[20],i=0;
while(a!=0)
{s[i]=(a%2);a=a/2;i++;}
i--;//这里!!!!!!!!!!!!!
while(i>=0){printf("%d",s[i]);i--;}
}
TA贡献1877条经验 获得超6个赞
因为后边的数都对 也就是说前边多了很多 因为你是按整形输出的 所以应该是多输出了一个元素 而且这个元素有不稳定性
说白了 你的第一个循环 运行完最后一环后 i++了 然而这个s[i]里边你是没有放东西的 然而 这个数组用之前没有初始化 所以这个s[i]里边是内存里边的一个无关的数 被你在第二个循环里输出了 所以 第一个循环结束之后 添一个i--;
就是这样
#include "stdio.h"
void tentotwo(int a);
void main()
{
int a;
scanf("%d",&a);
tentotwo(a);
}
void tentotwo(int a)
{int s[20],i=0;
while(a!=0)
{s[i]=(a%2);a=a/2;i++;}
i--;
while(i>=0){printf("%d",s[i]);i--;}
}
或者先把数组初始化#include "stdio.h"
void tentotwo(int a);
void main()
{
int a;
scanf("%d",&a);
tentotwo(a);
}
void tentotwo(int a)
{int s[20],i=0;
for(;i<=20;i++)
s[i]=0;
i=0;
while(a!=0)
{s[i]=(a%2);a=a/2;i++;}
while(i>=0){printf("%d",s[i]);i--;}
}不过第二种结果前边多一个0;不过不影响理解
- 2 回答
- 0 关注
- 94 浏览
添加回答
举报