期末考试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判断何时跳出(避免成死循环),经过测试应该没什么问题了,还望各路大神多多指教有没有错误或更好的方法!!