用字符串表示十进制数

不使用printf,将十进制数以二进制和十六进制的形式输出
问题
如果不能使用printf系列库函数,我们可以通过位运算得到这个十进制数的二进制和十六进制形式的字符串,再将字符串打印。
代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//得到二进制形式的字符串
char *get2String(long num)
{
    int i=0;
    char* buffer;
    char* temp;
    buffer = (char*)malloc(33);
    temp=buffer;//temp
    for(i =0;i<32;i++)
    {
        temp[i] =num&(1<<(31-i));
        temp[i] =temp[i]>>(31-i);
        temp[i] =(temp[i]==0)?'0':'1';
    }
    buffer[32]='\0';
    return buffer;
}
char *get16String(long num)
{
    int i =0;
    char *buffer=(char*)moalloc(11);
    char *temp;
    buffer[0]='0';
    buffer[1]='x';
    buffer[10]='\0';
    temp = buffer+2;
    for(i =0;i<8;i++)
    {
        temp[i]=(char)(num<<4 * i>>28);
        temp[i]=temp[i]>=0?temp[i]:temp[i]+16;
        temp[i]=temp[i]<10?temp[i]+48:temp[i]+55;
    }
    return buffer;
}
int main()
{
    char *p = NULL;
    char *q = NULL:
    int num =0;
    scanf("%d",&num);
    p = get16String(num);
    q = get2String(num);
    printf("%s\n",p);
    printf("%s\n",q);
    return 0;
}
在 Java 中,将字符串转换为十进制数的方法有多种,以下是几种常见的方法及其示例代码: ### 二进制字符串十进制数 实现 `bin2Dec` 方法可将二进制字符串转换为十进制数,若字符串不是二进制字符串,会抛出 `NumberFormatException` 异常。 ```java public class Main { public static int bin2Dec(String binaryString) { int sum = 0; for (int i = 0; i < binaryString.length(); i++) { char ch = binaryString.charAt(i); if (ch > '1' || ch < '0') { throw new NumberFormatException(String.valueOf(i)); } sum = sum * 2 + (binaryString.charAt(i) - '0'); } return sum; } public static void main(String[] args) { String s = "1001"; System.out.println(bin2Dec(s)); } } ``` 此代码通过遍历二进制字符串的每个字符,将字符转换为数字并计算对应的十进制值,若字符不是 `0` 或 `1`,则抛出异常[^1]。 ### 十六进制字符串十进制数 可使用霍纳算法将十六进制字符串转换为十进制数。 ```java import java.util.Scanner; public class Hex2Dec { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter a hex number: "); String hex = input.nextLine(); input.close(); System.out.println("The decimal value for hex number " + hex + " is " + hexToDecimal(hex.toUpperCase())); } public static int hexCharToDecimal(char ch) { if (ch >= 'A' && ch <= 'F') { return 10 + ch - 'A'; } else { return ch - '0'; } } public static int hexToDecimal(String hex) { int decimalValue = 0; for (int i = 0; i < hex.length(); i++) { char hexChar = hex.charAt(i); decimalValue = decimalValue * 16 + hexCharToDecimal(hexChar); } return decimalValue; } } ``` 该代码首先将输入的十六进制字符串转换为大写,然后遍历字符串中的每个字符,将字符转换为对应的十进制值,并根据霍纳算法计算最终的十进制结果[^4]。 ### 递归方式将十六进制字符串十进制数 递归方式可通过当前字符位置和字符串长度计算指数,进而将十六进制字符串转换为十进制数。虽然引用中未给出完整代码,但思路是根据当前字符位置和字符串长度求出该字符对应的指数,然后递归计算每个字符的十进制值并累加。 ```java public class HexToDecRecursive { public static int hexCharToDecimal(char ch) { if (ch >= 'A' && ch <= 'F') { return 10 + ch - 'A'; } else { return ch - '0'; } } public static int hexToDecimalRecursive(String hex, int index) { if (index == hex.length()) { return 0; } char hexChar = hex.charAt(index); int power = hex.length() - index - 1; return (int) (hexCharToDecimal(hexChar) * Math.pow(16, power)) + hexToDecimalRecursive(hex, index + 1); } public static int hexToDecimal(String hex) { return hexToDecimalRecursive(hex.toUpperCase(), 0); } public static void main(String[] args) { String hex = "1A"; System.out.println(hexToDecimal(hex)); } } ``` 此代码通过递归调用 `hexToDecimalRecursive` 方法,计算每个字符对应的十进制值并累加,最终得到十六进制字符串十进制表示[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值