很急,请问如何把十进数xxx如750转换为八进进制数0xxx如0750?

时间:2022-04-11 17:48:46
很急,请问如何把十进数xxx如750转换为八进进制数0xxx如0750?能否用C描述过程?谢谢

14 个解决方案

#1


str=""
while (数字>0)

  temp 取 数字 模 8
  str= chr(temp+48)+str 
  数字 置为 数字 除 8
}

Print "0"+Str 即为答案

自己可以转化成C程序吧

#2


To SoftWare1999(Programmer) :

谢谢,但你这个解法不行,也许你误会了。我的意思是,假设int a = 750,那么要把int b 等于0750,不能用字符表示,要用整型。怎么才能把750转为0750啊?

#3


整型中无法区别 750 和 0750 的

#4


刚才测试了一下,对于 int 类型,进制是没有内置效果的,只在 printf 和 scanf 的时候有不同的表示而已。测试程序:
#include <stdio.h>

int main()
{
    int i = 0x0;
    for (i = 0; i < 20; i++)
    {
        printf("%d\t", i);
    }
    for (i = 0; i < 20; i++)
    {
        printf("%o\t", i);
    }
    for (i = 0; i < 20; i++)
    {
        printf("%x\t", i);
    }
    system("PAUSE");
}
剩下的自己解决吧:)

#5


#include<math.h>
#include<stdio.h>

int main()
{
int a , b , n , tmp ;
a = 750 ;
n=0;
b=0;
while( a>=1 )
{
tmp = a - (a/10)*10 ;
b += tmp * (int)pow(8.0,n);
a/=10 ;
n++;
}
printf("=========> %d\n" , b);
return  0;
}

#6


那简单啊,先算出0750的十进制数为488,
然后k=488
printf("%o", k);

不就好了,只有打印效果,计算机内部是不分进制的,统统都是1,0啊

#7


我的思路,先将十进制数化成八进制数,
在用sprintf函数,这个函数可以将你要的输出形式放到指定的字符数组里。你再输出这个字符数组就行了。如果你还不会,我晚上给一个例子。建议你先看看sprintf的功能说明。它的原型是
int sprintf(char*s ,const char* format,....)在用它之前应该为字符数组s开辟足够的空间

#8


/*     750  ====>   488(0750)  */  
#include<math.h>
#include<stdio.h>
int main()
{
int a , b , n , tmp ;
a = 750 ;
n=0;
b=0;
while( a>=1 )
{
tmp = a - (a/10)*10 ;
b += tmp * (int)pow(8.0,n);
a/=10 ;
n++;
}
printf("=========> %d\n" , b);
return  0;
}

#9


偶再跟,完全一下:)
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 750;
    int j = 0;
    char * cNum = (char*)malloc(512*sizeof(char));
    sprintf(cNum, "%i", i);
    sscanf(cNum, "%o", &j);
    printf("%i", j);
    system("PAUSE");
}

#10


用%o输出就行了。

#11


嗯,本人需要在unix下做c开发,使用到系统调用chmod更改文件权限时需要传入八进制参数,因为不能以%o输出。

#12


有谁知道怎么把十进制的数转换为八进制?C或者UNIX系统调用有这个函数吗?

#13


我给你的那程序就能把十进转成相应的八进呀
比方说你的十进是750。我的程序能把它换成488。转成8进还是750。不是正好符合你的要求吗?
呵呵。给分吧。

#14


而且楼上的也对。方法比我这还简单
你用sprintf()把十进数750输入到一个临时的内存区中,再用sscanf()当成八进数读进来。这样你就得到了一个八进的750了呀。
建议楼主好好看看跟贴。

#1


str=""
while (数字>0)

  temp 取 数字 模 8
  str= chr(temp+48)+str 
  数字 置为 数字 除 8
}

Print "0"+Str 即为答案

自己可以转化成C程序吧

#2


To SoftWare1999(Programmer) :

谢谢,但你这个解法不行,也许你误会了。我的意思是,假设int a = 750,那么要把int b 等于0750,不能用字符表示,要用整型。怎么才能把750转为0750啊?

#3


整型中无法区别 750 和 0750 的

#4


刚才测试了一下,对于 int 类型,进制是没有内置效果的,只在 printf 和 scanf 的时候有不同的表示而已。测试程序:
#include <stdio.h>

int main()
{
    int i = 0x0;
    for (i = 0; i < 20; i++)
    {
        printf("%d\t", i);
    }
    for (i = 0; i < 20; i++)
    {
        printf("%o\t", i);
    }
    for (i = 0; i < 20; i++)
    {
        printf("%x\t", i);
    }
    system("PAUSE");
}
剩下的自己解决吧:)

#5


#include<math.h>
#include<stdio.h>

int main()
{
int a , b , n , tmp ;
a = 750 ;
n=0;
b=0;
while( a>=1 )
{
tmp = a - (a/10)*10 ;
b += tmp * (int)pow(8.0,n);
a/=10 ;
n++;
}
printf("=========> %d\n" , b);
return  0;
}

#6


那简单啊,先算出0750的十进制数为488,
然后k=488
printf("%o", k);

不就好了,只有打印效果,计算机内部是不分进制的,统统都是1,0啊

#7


我的思路,先将十进制数化成八进制数,
在用sprintf函数,这个函数可以将你要的输出形式放到指定的字符数组里。你再输出这个字符数组就行了。如果你还不会,我晚上给一个例子。建议你先看看sprintf的功能说明。它的原型是
int sprintf(char*s ,const char* format,....)在用它之前应该为字符数组s开辟足够的空间

#8


/*     750  ====>   488(0750)  */  
#include<math.h>
#include<stdio.h>
int main()
{
int a , b , n , tmp ;
a = 750 ;
n=0;
b=0;
while( a>=1 )
{
tmp = a - (a/10)*10 ;
b += tmp * (int)pow(8.0,n);
a/=10 ;
n++;
}
printf("=========> %d\n" , b);
return  0;
}

#9


偶再跟,完全一下:)
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i = 750;
    int j = 0;
    char * cNum = (char*)malloc(512*sizeof(char));
    sprintf(cNum, "%i", i);
    sscanf(cNum, "%o", &j);
    printf("%i", j);
    system("PAUSE");
}

#10


用%o输出就行了。

#11


嗯,本人需要在unix下做c开发,使用到系统调用chmod更改文件权限时需要传入八进制参数,因为不能以%o输出。

#12


有谁知道怎么把十进制的数转换为八进制?C或者UNIX系统调用有这个函数吗?

#13


我给你的那程序就能把十进转成相应的八进呀
比方说你的十进是750。我的程序能把它换成488。转成8进还是750。不是正好符合你的要求吗?
呵呵。给分吧。

#14


而且楼上的也对。方法比我这还简单
你用sprintf()把十进数750输入到一个临时的内存区中,再用sscanf()当成八进数读进来。这样你就得到了一个八进的750了呀。
建议楼主好好看看跟贴。