C 如何找到给定数字的最大位数

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

我的问题是,我正在将给定的八进制数转换为二进制数,将二进制数转换为十六进制数。为了显示十六进制,我使用了%lx。但我想找出这个十六进制的最大值。有没有办法存储%lx值,然后运行最大的函数

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,但有什么意义呢?