#include <stdio.h>
#include <math.h>
void main() {
long int on, temp;
int dn = 0, e = 0, digit;
printf("Enter octal number : ");
scanf("%ld", &on);
temp = on;
while (on != 0) {
digit = on % 10;
dn += digit * pow(8, e);
e++;
on /= 10;
}
printf("octal number = %ld \n", temp);
printf("Decimal number= %d \n", dn);
return 1;
}
嗨,美好的一天。我有这个代码将八进制数转换为十进制,但我的问题/问题是如何制作一个将转换八进制十进制数的代码。例如:
0.75 8 →___ 10
0.00001 8 →___ 10
在转换中,您必须将每个数字乘以8的平方(8,64,542 ...)
我需要帮助。
答案 0 :(得分:6)
不要这样做。
将用户的数据读入char*
缓冲区。
然后使用strtoul()
;指定基数为8。
答案 1 :(得分:3)
这是一个程序,它将输入一个小数八进制数并将其转换为浮点值。一个八进制点和至少一个后续数字是必需的,所以不要期望这对像&#34; 100&#34;这样的输入起作用。或&#34; 100。&#34;
#include <stdio.h>
int main() {
unsigned int integer_part, fraction_part, len1, len2;
double result;
scanf("%o.%n%o%n", &integer_part, &len1, &fraction_part, &len2);
result = fraction_part * 1.0 / (1<<(len2-len1)*3);
result += integer_part;
printf("%.6f\n",result);
return 0;
}
$ ./oct <<<"0.75"
0.953125
$ ./oct <<<"100.1"
64.125000
如果你想接受更广泛的输入(包括整数),那么你最好阅读整行文本并逐步解析它。
答案 2 :(得分:2)
您可以将数据读取为八进制格式。
#include<stdio.h>
#include<math.h>
int main()
{
unsigned on;
printf("Enter octal number : ");
scanf("%o",&on);
printf("octal number = %o \n",on);
printf("Decimal number= %d \n",on);
return 0;
}
从字面上看,您如何阅读数据或显示数据,内部表示对于所有十六进制,八进制和十进制都是相同的。如需进一步阅读see
答案 3 :(得分:1)
如果需要处理分数输入,如表示八进制数并且小数值为83.589843750
的字符串“123.456”,则将整数(整数)部分和小数部分分别读为整数:八进制数字串中的每个整数。
重复使用代码的好时机,因此创建一个辅助函数。代码可以使用unsigned on; scanf("%o",&on);
或代码,如下所示。
分数部分有点棘手。下面的代码将每个小数位“除以”乘以8乘以1000/8并除以1000
(通过打印.
右侧的3位数组。)
#include <stdio.h>
#include <limits.h>
#include <stdint.h>
static int ReadOctal(uintmax_t *octal, unsigned *count) {
int ch;
*octal = 0;
*count = 0;
while ((ch=fgetc(stdin)) >= '0' && ch <= '7') {
(*count)++;
if (*octal > UINTMAX_MAX/8) puts("Overflow");
*octal = *octal*8 + (unsigned)(ch - '0');
}
return ch;
}
void octal_decimal(void) {
uintmax_t ipart;
uintmax_t fpart = 0;
unsigned count;
int ch = ReadOctal(&ipart, &count);
if (ch == '.') {
ReadOctal(&fpart, &count);
}
printf("%ju", ipart);
if (ch == '.') {
for (unsigned i=0; i<count; i++) {
if (fpart > UINTMAX_MAX/(1000/8)) puts("Overflow");
fpart *= 1000/8;
}
printf(".%0*ju", count*3, fpart);
}
puts("");
}
123.456 // input
83.589843750 // output