C 如何找到给定数字的最大位数
我的问题是,我正在将给定的八进制数转换为二进制数,将二进制数转换为十六进制数。为了显示十六进制,我使用了%lx。但我想找出这个十六进制的最大值。有没有办法存储%lx值,然后运行最大的函数C 如何找到给定数字的最大位数,c,C,我的问题是,我正在将给定的八进制数转换为二进制数,将二进制数转换为十六进制数。为了显示十六进制,我使用了%lx。但我想找出这个十六进制的最大值。有没有办法存储%lx值,然后运行最大的函数 long long convertOctalToBinary(int octalNumber); int convertBinarytoHex(long long binary); int largest(long int hex); int main() { int octalNumber; long lo
long long convertOctalToBinary(int octalNumber);
int convertBinarytoHex(long long binary);
int largest(long int hex);
int main()
{
int octalNumber;
long long number;
long int result;
int temp;
int large;
printf("Enter an octal number: ");
scanf("%d", &octalNumber);
number = convertOctalToBinary(octalNumber);
printf("number : %d\n", number);
result = convertBinarytoHex(number);
printf("result : %lX\n", result);
large = largest(temp);
printf("large : %lX\n", large);
}
int convertBinarytoHex(long long number)
{
long int hexvalue = 0;
int i = 1;
int r; //declare variables
while (number != 0) //if binary number is not equal to 0 then following instructions will execute
{
r = number % 10; //by performing modulo we get remainder
hexvalue = hexvalue + r * i; //for first digit i =1 as binavalue*2^0,binvalue*2^1
i = i * 2; //i value multiplied with 2 for next iteration,for next iterations it becmoes 2^1,2^2,2^3
number = number / 10; //now get reamaing binary value
}
return hexvalue;
}
int largest(long int hex)
{
int p,i=0,digit,large=0;//variables
p=hex;//storing original value entered by user to variable p
while(hex>0)
{
digit=hex%10;//finding digit
if(digit>large)//checking condition for large
large=digit;
hex = hex / 10;//dividing number by 10
}
return large;
}
你可能想要这个:
#include <stdio.h>
char largestdigit(const char *buffer)
{
char largest = 0; // largest digit (initially 0)
char c;
while (c = *buffer++) // loop until we reach end of string
{
if (c > largest)
largest = c;
}
return largest;
}
int main()
{
int number;
printf("Enter an octal number: ");
scanf("%o", &number); // read number entered in octal
char hexbuffer[50];
sprintf(hexbuffer, "%x", number); // output number in hexadecimal to hexbuffer
char large = largestdigit(hexbuffer); // find largest digit in hexbuffer
printf("largest digit of hexadecimal representation (%x) of octal number %o : %c\n", number, number, largestdigit(hexbuffer));
}
你可能想要这个:
#include <stdio.h>
char largestdigit(const char *buffer)
{
char largest = 0; // largest digit (initially 0)
char c;
while (c = *buffer++) // loop until we reach end of string
{
if (c > largest)
largest = c;
}
return largest;
}
int main()
{
int number;
printf("Enter an octal number: ");
scanf("%o", &number); // read number entered in octal
char hexbuffer[50];
sprintf(hexbuffer, "%x", number); // output number in hexadecimal to hexbuffer
char large = largestdigit(hexbuffer); // find largest digit in hexbuffer
printf("largest digit of hexadecimal representation (%x) of octal number %o : %c\n", number, number, largestdigit(hexbuffer));
}
我要说的是,你的方法完全错误 首先,除非您确实需要高性能,否则以数字类型存储表示是没有意义的。不过,这很可能会导致错误
int
存储一个数字,而不是它的表示形式。但是,您可以告诉scanf
将输入视为八进制数。只需使用scanf(“%o”和&var)
如果问题是找到最大的数字,那么最好将其转换为数字数组,也就是字符串表示形式。下面是一些将int转换为任意基中的字符串的代码
#include <stdio.h>
/* Will work for base 2-36. Well, it works for higher bases too, but
it can be iffy to interpret the result. */
void intToStr(int number, int base, char * dest)
{
int index = 0;
while (number != 0) {
int rem=number%base;
char digit = rem>9 ? rem+'a'-10 : rem+'0';
dest[index++]=digit;
number/=base;
}
dest[index]='\0';
for(int i=0; i<index-1; i++) {
char tmp = dest[i];
dest[i]=dest[index-i-1];
dest[index-i-1]=tmp;
}
}
char highestDigit(const char *str)
{
char c=str[0];
int index=0;
while(str[index]) {
c=c<str[index] ? str[index] : c;
index++;
}
return c;
}
int main()
{
char str[100];
int n;
printf("Enter a octal number: ");
scanf("%o", &n);
printf("\nBase Value Highest digit\n");
for(int i=2; i<17; i++) {
intToStr(n, i, str);
printf("%d: %s %c\n", i, str, highestDigit(str));
}
}
我要说的是,你的方法完全错误 首先,除非您确实需要高性能,否则以数字类型存储表示是没有意义的。不过,这很可能会导致错误
int
存储一个数字,而不是它的表示形式。但是,您可以告诉scanf
将输入视为八进制数。只需使用scanf(“%o”和&var)
如果问题是找到最大的数字,那么最好将其转换为数字数组,也就是字符串表示形式。下面是一些将int转换为任意基中的字符串的代码
#include <stdio.h>
/* Will work for base 2-36. Well, it works for higher bases too, but
it can be iffy to interpret the result. */
void intToStr(int number, int base, char * dest)
{
int index = 0;
while (number != 0) {
int rem=number%base;
char digit = rem>9 ? rem+'a'-10 : rem+'0';
dest[index++]=digit;
number/=base;
}
dest[index]='\0';
for(int i=0; i<index-1; i++) {
char tmp = dest[i];
dest[i]=dest[index-i-1];
dest[index-i-1]=tmp;
}
}
char highestDigit(const char *str)
{
char c=str[0];
int index=0;
while(str[index]) {
c=c<str[index] ? str[index] : c;
index++;
}
return c;
}
int main()
{
char str[100];
int n;
printf("Enter a octal number: ");
scanf("%o", &n);
printf("\nBase Value Highest digit\n");
for(int i=2; i<17; i++) {
intToStr(n, i, str);
printf("%d: %s %c\n", i, str, highestDigit(str));
}
}
计算机中只有一种数字,那就是二进制数。其他一切都是二进制数的用户表示。因此,“从八进制转换为二进制”等是没有意义的,因为C程序中的每个变量始终是二进制的。当您需要从用户获取数字或向用户提供数字时,您可以使用另一个数字库。例如,您可以使用
scanf(“%o”、&octalNumber)读取用户以八进制打印的数字您可以使用printf(%o),octalNumber);
将数字显示为八进制,这就是我们读/写“普通”的原因带有%d
的整数,表示十进制,以10为基数。这意味着输入/输出将采用十进制格式。问题是,用户给定一个八进制数,我们需要显示octal@AbhijitReddy请回答您的问题并将所有相关信息放在那里。您可能需要使用sprintf()
将十六进制值格式化为字符串。然后你可以分析字符串,找出最大的十六进制数字,当然你也可以打印字符串。计算机中只有一种数字,那就是二进制数。其他一切都是二进制数的用户表示。因此,“从八进制转换为二进制”等是没有意义的,因为C程序中的每个变量始终是二进制的。当您需要从用户获取数字或向用户提供数字时,您可以使用另一个数字库。例如,您可以使用scanf(“%o”、&octalNumber)读取用户以八进制打印的数字您可以使用printf(%o),octalNumber);
将数字显示为八进制,这就是我们读/写“普通”的原因带有%d
的整数,表示十进制,以10为基数。这意味着输入/输出将采用十进制格式。问题是,用户给定一个八进制数,我们需要显示octal@AbhijitReddy请回答您的问题并将所有相关信息放在那里。您可能需要使用sprintf()
将十六进制值格式化为字符串。然后,您可以分析字符串以找到最大的十六进制数字,当然,您也可以打印字符串。您可以比较C中的任何数字类型,尽管您可能必须强制使用浮点
来比较整数
。既然long
和int
都是固定类型,您可以直接比较它们。@MichaelShopsin True,但有什么意义呢?您可以比较C中的任何数字类型,尽管您可能必须强制使用float
与int
进行比较。既然long
和int
都是固定类型,您可以直接比较它们。@MichaelShopsin True,但有什么意义呢?