十进制转八进制

雨巷流刀 2019-01-12 03:29:16
期末考试c语言的最后一道题,编写将任意十进制整数转换成八进制。考的时候因为时间仓促写完不加思考就交卷了,后发现有很多错误,发个博客来记住下自己的错误… 原型如下: #include<stdio.h> void main() { int a,i,k[10]; scanf("%d",&a); for(i=0;a%8>0;i++) { k[i]=a%8; a=a/8; } while(i--) printf("%d",k[i]); } 经上机验证发现若数本身是八的倍数或循环除八后有是八的倍数则会错误(不进入循环,或循环次数减少导致错误)。 经过各方指教,和自己琢磨得出下面程序: #include<stdio.h> void main() { int a,i,k[20]; scanf("%d",&a); for(i=0;a%8>=0;i++) { k[i]=a%8; a=a/8; if(a==0) { i++; break; } } while(i--) printf("%d",k[i]); } 将for循环条件改成a%8>=0,在循环体中加入if判断何时跳出(避免成死循环),经过测试应该没什么问题了,还望各路大神多多指教有没有错误或更好的方法!!
...全文
145 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
射手座cl 2019-01-14
  • 打赏
  • 举报
回复
考完试还能在做一下没做完的题,给你点个赞
  • 打赏
  • 举报
回复
输出的是余数 循环判断的是商
雨巷流刀 2019-01-13
  • 打赏
  • 举报
回复
引用 5 楼 砸死牛顿的苹果的回复:
#include<stdio.h>
void main()
{
int a,i,k[10];
scanf("%d",&a);
for(i=0;a>0;i++)
{
k[i]=a%8;
a=a/8;
}
while(i--)
printf("%d",k[i]);
}

这样试试
试了下这样的确可以,感觉还不错 更好理解谢谢啦!
  • 打赏
  • 举报
回复
#include<stdio.h>
void main()
{
int a,i,k[10];
scanf("%d",&a);
for(i=0;a>0;i++)
{
k[i]=a%8;
a=a/8;
}
while(i--)
printf("%d",k[i]);
}

这样试试
雨巷流刀 2019-01-13
  • 打赏
  • 举报
回复
引用 3 楼 砸死牛顿的苹果的回复:
输出的是余数 循环判断的是商
刚又试了一下,感觉其实for的循环条件是什么无所谓只要是真就可以,改成1也行,应为循环体有跳出的条件,是吗?
雨巷流刀 2019-01-12
  • 打赏
  • 举报
回复
引用 1 楼 砸死牛顿的苹果的回复:
for 循环应该判断商 而不是余数
十进制转八进制输出的是余数啊,应该是输出余数吧
  • 打赏
  • 举报
回复
for 循环应该判断商 而不是余数

11,849

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧