一【题目难度】
- 乙级
二【题目编号】
- 1101 B是A的多少倍 (15 分)
三【题目描述】
- 设一个数 A A A 的最低 D D D 位形成的数是 a d a_d ad。如果把 a d a_d ad 截下来移到 A A A 的最高位前面,就形成了一个新的数 B B B。 B B B 是 A A A 的多少倍?例如将 12345 的最低 2 位 45 截下来放到 123 的前面,就得到 45123,它约是 12345 的 3.66 倍。
四【题目示例】
-
输入格式:
输入在一行中给出一个正整数 A ( ≤ 1 0 9 ) A(≤10^9 ) A(≤109)和要截取的位数 D D D。题目保证 D D D 不超过 A A A 的总位数。 -
输出格式:
计算 B B B 是 A A A 的多少倍,输出小数点后 2 位。 -
输入样例 1:
12345 2 -
输出样例 1:
3.66 -
输入样例 2:
12345 5 -
输出样例 2:
1.00
五【解题思路】
- 这个题目的思路还是比较好想的,只需要把规定的位数给截下来,然后再拼接上,但是这里需要一个函数获取这个数字的长度,知道剩余长度了,才能拼接上,最后要记得转为浮点数输出小数点后两位
六【最终得分】
- 15分
七【代码实现】
#include<stdio.h>
#include<math.h>
int getLen_1101_BIsHowManyTimesOfA(int n)
{
int len = 0;
while(n != 0)
{
len++;
n /= 10;
}
return len;
}
int main()
{
int A,D,B,temp,keep,remainder,len;
scanf("%d %d",&A,&D);
keep = A;
len = getLen_1101_BIsHowManyTimesOfA(A);
temp = pow(10,D);
remainder = A % temp;
A /= temp;
temp = pow(10,len - D);
B = (remainder * temp + A);
double res = B * 1.0 / keep;
printf("%.2f",res);
return 0;
}