为了账号安全,请及时绑定邮箱和手机立即绑定

我觉得没错,可是就是有错,输入21,输出204810101,后五项对。

我觉得没错,可是就是有错,输入21,输出204810101,后五项对。

C
繁星点点滴滴 2023-03-19 22:18:13
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++;}while(i>=0){printf("%d",s[i]);i--;}}分别编写子函数完成--十进制整数转化为二进行与十六进制数的程序;主程序—将十进制数以二、16进制输出。
查看完整描述

2 回答

?
holdtom

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--;} 
}

 


查看完整回答
反对 回复 2023-03-22
?
慕哥9229398

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;不过不影响理解


查看完整回答
反对 回复 2023-03-22
  • 2 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信