我需要一个程序,该程序:可以转换特定基数的任何数字,也可以转换成另一基数的数字。它必须适用于实数(例如7.34,3.14等)
输入:number1,base1,base_to_which_it_must_be_converted 输出:转换后的数字:
我设法编写了这样的程序,但是它们不能用于实数。
#include <stdio.h>
#include <string.h>
char reVal(int num)
{
if (num >= 0 && num <= 9)
return (char)(num + '0');
else
return (char)(num - 10 + 'A');
}
void strev(char *str)
{
int len = strlen(str);
int i;
for (i = 0; i < len/2; i++)
{
char temp = str[i];
str[i] = str[len-i-1];
str[len-i-1] = temp;
}
}
char* fromDeci(char res[], int base, int inputNum)
{
int index = 0;
while (inputNum > 0)
{
res[index++] = reVal(inputNum % base);
inputNum /= base;
}
res[index] = '\0';
strev(res);
return res;
}
int main()
{
int inputNum = 10, base = 3;
char res[100];
printf("Equivalent of %d in base %d is "
" %s\n", inputNum, base, fromDeci(res, base, inputNum));
return 0;
}
#include <stdlib.h>
#include <stdio.h>
int b,c,x,nr,nr2;
char z;
int main()
{
int num,i,l,b,a[50];
l=0;
printf("introduce the number and its base\n");
scanf("%d",&num);
scanf("%d",&b);
int n;
i=0;
n=num;
l=0;
while (n!=0)
{
l++;
n/=10;
}
n=num;
i=l;
while (n!=0)
{
a[i]= n%10;
n/=10;
i--;
}
i=0;
while(i<=l)
{
x=x*b+a[i];
i++;
}
printf("\n%d",x);
return 0;
}
答案 0 :(得分:0)
首先,当您使用实数时,需要更改num的类型。 它应该是“浮点数”;
,如果要将3.14从十进制转换为二进制,则需要将其分成两部分,一个是3,另一个是0.14,然后在所需的基数中分别将这两个转换,然后加起来。
希望这会有所帮助
答案 1 :(得分:0)
我们的数字系统称为带有位置标记的 base 10 。这表示数字123
表示1*10^2 + 2*10^1 + 3*10^0 = 100 + 20 +3
。您可以针对任何基础进行调整。
您需要覆盖基数的数字,因此基数36表示数字0..9,a..z(36位数字),然后采用上述公式。
更通用的公式是:a*base^n + b*base^(n-1) + ... q*base^0
,数字中的数字为n
。
对于浮点,其工作原理相同,但是在小数点后,您将得到负指数。
要与任何基数进行相互转换,请先转换为通用基数,然后再转换为“至”基数。