牛客网Python入门【02类型转换】

一、小数化整数

要求利用强制类型转换将小数转变成整数

a=float(input())
print(int(a))

C语言实现小数化整数

#include <stdio.h>

int main() {
    printf("enter:");
    float a;
    scanf("%f",&a);
    int b=(int)a;
    printf("%d",b);
    return 0;
}

或者

int b = round(a);   #将输入的浮点数四舍五入取整后赋值

不能使用 int b=scanf("%f",&a);直接赋值,这是因为:

在C语言中,scanf() 函数的返回值是成功读取的参数数量,而不是输入的值本身。因此,如果你写成 int b = scanf("%f", &a);b 将会得到 scanf() 的返回值(0/1:成功读取或失败),而不是输入的浮点数值。

除了强制类型转换外,还可以使用取整函数来将浮点数转换为整数。在C语言中,常见的取整函数有 round()ceil()floor()

  • round() 函数用于四舍五入取整。
  • ceil() 函数用于向上取整。
  • floor() 函数用于向下取整。

 二、为整数增加小数点

要求使用强制类型转换为输入的整数增加小数点,并输出改变类型后的变量类型。

a=int(input())
b=float(a)
print(b)
print(type(b))

可以发现Python和C语言在处理浮点数时的默认精度不同,这是设计和实现差异所致。Python中float类型小数点后默认1位,而C语言中6位 。

在Python中,浮点数默认的输出精度是17位小数,但在实际显示时可能会根据需要进行截断。当你打印一个浮点数时,Python会自动根据需要截断显示,通常会显示小数点后几位(通常是小数点后15到17位)以保持足够的精度。

而在C语言中,默认情况下,printf() 函数显示浮点数时会显示6位小数。这是因为C语言中 printf() 函数的默认格式符 %f 会显示6位小数。

在C语言中想要显示更多位数的小数,可以在格式字符串中指定精度,例如 %0.10f 表示显示10位小数。

# 使用字符串格式化
a = 3.141592653589793
print("%.10f" % a)  # 显示10位小数

在Python中,可以使用字符串格式化或者使用 round() 函数来控制小数点后的位数。例如:

# 使用round函数
b = round(a, 10)
print(b)

#使用字符串格式化
a = 3.141592653589793
print("%.10f" % a)  # 显示10位小数
print("{:.10f}".format(a)) 
print("{:.10f}".format(round(a, 10)))  #先将a四舍五入到小数点后10位,然后再输出十位小数。

{:.10f}"%.10f" 在 Python 中的输出效果是一样的,都用于格式化浮点数并显示到小数点后10位,只是格式化字符串的写法略有不同而已。 

三、十六进制数字的大小

要求使用input读入一个十六进制的数字,输出它的十进制数字

hex_number = input("请输入一个十六进制数字:")
decimal_number = int(hex_number, 16)
print("转换后的十进制数字为:", decimal_number)

这是标准答案,使用Python的int()函数将十六进制字符串转换为十进制数。示例如上:

Python自带的函数非常方便,在探索问题的过程中,不知道有此函数,因此使用字典尝试了一下,代码比较繁琐,但好在能实现功能。

dict = {"A": 10, "B": 11, "C": 12,"D":13,"E":14,"F":15}

a=input()
b=len(a)-1
number=0
for i in range(len(a)):
    if a[i] in dict:
        c = int(dict[a[i]])
    else:
        c=int(a[i])
    number += int(c * 16 ** b)
    b -= 1

print(number)

C语言实现将十六进制字符串转换为十进制数

#include <stdio.h>

int main() {
    char hex_number[10]; // 假设输入的十六进制数字不超过9位
    int decimal_number;
    
    printf("请输入一个十六进制数字:");
    scanf("%s", hex_number); // 读取十六进制数字
    
    // 使用sscanf函数将十六进制字符串转换为十进制数
    sscanf(hex_number, "%x", &decimal_number);
    
    printf("转换后的十进制数字为:%d\n", decimal_number); // 输出十进制数字
    
    return 0;
}

函数:sscanf(hex_number, "%x", &decimal_number); 中的%x代表解析十六进制。此外,

  • 十进制:%d 或 %i
  • 八进制:%o
  • 十六进制:%x 或 %X
  • 二进制:目前标准C语言库中没有直接的二进制格式指示符,但你可以通过解析为十六进制或者十进制后再进行转换来实现。

二进制转换为十进制也有相应的解决办法:

#include <stdio.h>
#include <stdlib.h> // 添加stdlib.h头文件以使用strtol函数

int main() {
    char binary_string[20]; // 假设输入的二进制字符串不超过19位
    unsigned int decimal_number;

    printf("请输入一个二进制数字:");
    scanf("%s", binary_string); // 读取二进制字符串

    // 使用strtol函数将二进制字符串转换为十进制数
    decimal_number = strtol(binary_string, NULL, 2);

    printf("转换后的十进制数字为:%u\n", decimal_number); // 输出十进制数字

    return 0;
}

即使用 strtol 函数,strtol 函数的第二个参数是一个指向字符指针的指针,指向第一个不是数字的字符。因为我们不需要关注这个指针,所以传入 NULL。第三个参数指定了要使用的进制,这里是 2,表示输入的是二进制数。 

更常见的做法,可以在输入字符串后,使用pow(2, x)函数,逐字符遍历实现:二进制转十进制(c语言)_二进制转化为十进制c语言代码-CSDN博客

  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值