文章目录
- [1101 B是A的多少倍](#1101 B是A的多少倍)
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;
}