PAT乙级(1101 B是A的多少倍)C语言解析

文章目录

  • [1101 B是A的多少倍](#1101 B是A的多少倍)
    • 输入格式
    • 输出格式
    • [输入样例 1](#输入样例 1)
    • [输出样例 1](#输出样例 1)
    • [输入样例 2](#输入样例 2)
    • [输出样例 2:](#输出样例 2:)
    • 代码示例

1101 B是A的多少倍

输入格式

输出格式

c 复制代码
计算 B 是 A 的多少倍,输出小数点后 2 位。

输入样例 1

c 复制代码
12345 2

输出样例 1

c 复制代码
3.66

输入样例 2

c 复制代码
12345 5

输出样例 2:

c 复制代码
1.00

代码示例

c 复制代码
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

int main() {
    // 定义变量 a 用于存储输入的正整数,d 用于存储要截取的位数
    // e 用于保存 a 的原始值,beishu 用于存储最终计算得到的倍数
    int  a, d, e;
    double beishu;

    // 从标准输入读取两个整数,分别赋值给变量 a 和 d
    // 这里 a 是给定的正整数,d 是要截取的最低位数
    scanf("%d %d", &a, &d);

    // 将 a 的原始值保存到变量 e 中,因为后续 a 的值会被修改
    e = a;

    // 初始化变量 b 为 1,b 用于存储 10 的 d 次方
    long b = 1;
    // 通过 for 循环计算 10 的 d 次方
    // 循环 d 次,每次将 b 乘以 10
    for(int i = 0; i < d; i++) {
        b *= 10;
    }

    // 提取 a 的最低 d 位,存储到变量 c 中
    // 利用取模运算 a % b 得到 a 的最低 d 位组成的数
    int c = a % b;

    // 去掉 a 的最低 d 位,更新 a 的值
    // 通过整数除法 a / b 得到去掉最低 d 位后的数
    a /= b;

    // 初始化 flag 为 1,flag 用于计算去掉最低 d 位后剩余数字的位数对应的 10 的幂
    int flag = 1;
    // 临时变量 temp 用于保存去掉最低 d 位后的 a 的值,避免修改 a 的值
    int temp = a;
    // 通过 while 循环计算去掉最低 d 位后剩余数字的位数对应的 10 的幂
    // 每次将 flag 乘以 10,并将 temp 除以 10,直到 temp 为 0
    while(temp != 0) {
        flag *= 10;
        temp /= 10;
    }

    // 形成新的数,将提取的最低 d 位放到最高位前面
    // 即把 c 乘以 flag 后加上去掉最低 d 位后的 a
    a = c * flag + a;

    // 计算新形成的数 a 是原始数 e 的多少倍
    // 将 a 强制转换为 double 类型,再除以 e 得到倍数
    beishu = (double)a / e;

    // 输出结果,保留小数点后两位
    printf("%.2f", beishu);

    return 0;
}
相关推荐
Toby_0096 分钟前
go 数据类型转换
开发语言·golang
zwjapple29 分钟前
python创建flask项目
开发语言·python·flask
Elastic 中国社区官方博客32 分钟前
JavaScript 中使用 Elasticsearch 的正确方式,第一部分
大数据·开发语言·javascript·数据库·elasticsearch·搜索引擎·全文检索
__ocean42 分钟前
编译Qt5.15.16并启用pdf模块
开发语言·qt·pdf
万物得其道者成44 分钟前
从零开始创建一个 Next.js 项目并实现一个 TodoList 示例
开发语言·javascript·ecmascript
CodeQingqing1 小时前
C语言练手磨时间
c语言·数据结构·算法
77tian1 小时前
设计模式的原理及深入解析
java·开发语言·单例模式·设计模式·代理模式·享元模式·原型模式
幽蓝计划1 小时前
仓颉开发语言入门教程:搭建开发环境
开发语言·鸿蒙
Dovis(誓平步青云)1 小时前
探索C++面向对象:从抽象到实体的元规则(上篇)
开发语言·c++·经验分享·笔记·学习方法
北极象2 小时前
各编程语言对正则表达式标准的支持对比
开发语言·正则表达式·scala·go语言