学生会办公室部门职责:请教:解决输入一个八进制数,转换成十进制源代码实现。

来源:百度文库 编辑:神马品牌网 时间:2024/05/12 04:52:35
定义一个函数,其功能是接收任意长度的一个八进制数将其转换成十进制数,返回。并在主函数里输出此八进制数和转换后的十进制数。
用C语言实现。
(此程序算法看起来很简单,但是实际用代码解决时会遇到怎样求输入的八进制数的位数,才能将其第一位*8的0次幂,第二位*8的1次幂......)
希望用代码回答。谢谢!
必须要用这种思想来编。你说的右移我不赞同。还有你设的是一个数组,要求输入数字,你怎么能判断数字是几位的阿?不理解

让我们一起来想想,是不是非要用这个思路呢,先看看下面我的实现:
#define MAX 10
int get8to10()
{
char *str,s[MAX];
int n=0;
str=s
gets(s);
while(*(str)!='\0')
n=(n<<3)+ (*(str++) - 0x30);

return n;
}

这里n其实就担当了进位的脚色呵呵~n在每次循环后,就相当于右移了3位(乘8),至于移动多少位,我们就不用管了,自然有while来控制~~ 0x30其实就是'0',任何一个数字字符的实际值就是减去字符'0'的值呵呵
by the way:这个段子没有对十进制的溢出做判断,不过我相信这个已经不是难点了,你一定能解决.
-------------------
enjoy it~~

#include<stdio.h>

double conv8()
{
char str[1000];
double sum=0.0,c=1.0;
int len=0,i=0;
printf("enter string:\n");
gets(str);
len=strlen(str);
for(i=len-1; i>=0; i--) /*从输入的最右边开始转换*/
{
sum+=(c*(str[i]-48)); /*str[i]-48 是因为输入的是字符,字符'0'-48=0...'9'-48=9*/
c*=8; /*每计算靠左的一位,c=c*8 */
}
return sum;

}

void main()
{
double sum=0.0;
sum=conv8();
printf("sum=%f",sum);

}