免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1520 | 回复: 9
打印 上一主题 下一主题

HI,请教各位一个问题,谢谢回答:) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-24 10:24 |只看该作者 |倒序浏览
八进制是逢8进一,十进制是逢十进一
假八进制就是一个十进制的数中没有8,9两个数字,我们认为十位上的权重是8,而不是10,百位上的权重是64,而不是100,依次类推
例如:八进制的(312)=3×64+1×8+2=192+8+2=十进制的(202)
要求:编制函数,实现八进制到十进制的转换,C语言实现,诠释全部
函数头是:int get10(int A8);
cdecl int main ()
{
    printf("%d,%d,%d\n",get10(22),get10(312),get10(12345));
    return 0;
}
运行结果为:18,202,5349

论坛徽章:
0
2 [报告]
发表于 2003-02-24 10:31 |只看该作者

HI,请教各位一个问题,谢谢回答:)

问题在哪里?

论坛徽章:
0
3 [报告]
发表于 2003-02-24 10:51 |只看该作者

HI,请教各位一个问题,谢谢回答:)

他是想要get10()这个函数

论坛徽章:
0
4 [报告]
发表于 2003-02-24 11:05 |只看该作者

HI,请教各位一个问题,谢谢回答:)

假设s保存8进制数
int result=0;//保存结果
for(int i=0;s;i++)
result=result*8+s-'0';


11 =1 x8 +1  
111 =1X8x8+ 1x8 +1

论坛徽章:
0
5 [报告]
发表于 2003-02-24 11:24 |只看该作者

HI,请教各位一个问题,谢谢回答:)

谁还有更好的法子

  1. int get10(int A8){
  2.         int result = 0;
  3.         int sign = 1;       
  4.         char szTemp[MAXSTRLEN];
  5.         char *pCurPos ;
  6.         memset (sztemp, '\0', sizeof(szTemp));
  7.         sprintf (szTemp, "%d", A8);
  8.         pCurPos = szTemp ;
  9.         if (*pCurPos == '-'){
  10.                 sign = -1 ;
  11.                 pCurPos ++ ;
  12.         }else if (*pCurPos == '+')
  13.                 pCurPos ++ ;
  14.         while(*pCurPos != '\0'){
  15.                 if (!((PCurPos >;= '0')&&(pCurPos <= '9')))
  16.                         return 0 ;
  17.                 result = 8*(result) + (*pCurPos - '0')
  18.                 pCurPos ++ ;
  19.         }
  20.         return sign * result ;
  21. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2003-02-24 12:41 |只看该作者

HI,请教各位一个问题,谢谢回答:)

我认为我的最简单,呵呵:
int get10(int A
{
char  number[16];
int   A10=0;

sprintf(number,"%d",A;
sscanf(number,"%o",&amp;A10);
return A10;
}

论坛徽章:
0
7 [报告]
发表于 2003-02-24 12:42 |只看该作者

HI,请教各位一个问题,谢谢回答:)

int get10(int A8 )
{
char number[16];
int A10=0;

sprintf(number,"%d",A8  );
sscanf(number,"%o",&amp;A10);
return A10;
}

论坛徽章:
0
8 [报告]
发表于 2003-02-24 13:06 |只看该作者

HI,请教各位一个问题,谢谢回答:)

呵呵,往往会忘记了sscanf
高!

论坛徽章:
0
9 [报告]
发表于 2003-02-24 13:07 |只看该作者

HI,请教各位一个问题,谢谢回答:)

呵呵,往往会忘记了sscanf
高!

论坛徽章:
0
10 [报告]
发表于 2003-02-24 14:06 |只看该作者

HI,请教各位一个问题,谢谢回答:)

int get10(int A
{
int a=A8,n=1,a10=0;
while(a!=0)
{
  a10+=(a%10)*n;
  a/=10;
  n*=8;
}

return a10;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP