PAT Basic 1101. B是A的多少倍
1. 题目描述:
设一个数 \(A\) 的最低 \(D\) 位形成的数是 \(a_d\)。如果把 \(a_d\) 截下来移到 \(A\) 的最高位前面,就形成了一个新的数 \(B\)。\(B\) 是 \(A\) 的多少倍?例如将 12345 的最低 2 位 45 截下来放到 123 的前面,就得到 45123,它约是 12345 的 3.66 倍。
2. 输入格式:
输入在一行中给出一个正整数 \(A\)(\(≤10^9\))和要截取的位数 \(D\)。题目保证 \(D\) 不超过 \(A\) 的总位数。
3. 输出格式:
计算 \(B\) 是 \(A\) 的多少倍,输出小数点后 2 位。
4. 输入样例:
12345 2
12345 5
5. 输出样例:
3.66
1.00
6. 性能要求:
Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB
思路:
回血题,根据题意把正整数\(A\)和\(B\)算出来即可,实际上就是找出十进制数各位的正确权重。这里因为正整数\(A\)最大为\(10^9\),那么相应的\(B\)也存在上界\(10^9\),不用担心int类型存不下。
My Code:
#include <stdio.h>
#include <string.h> // strlen header
#include <math.h> // pow header
int main(void)
{
char num[11] = "";
int numA=0, numB=0;
int d=0;
int weight=0; // weight of every bit
int i=0; // iterator
int numLen = 0;
scanf("%s%d", num, &d);
numLen = strlen(num);
//printf("numLen: %d\n", numLen);
weight = numLen-1;
for(i=0; i<numLen; ++i)
{
numA += pow(10, weight) * (num[i]-'0');
--weight;
}
weight = numLen-1;
i = numLen - d;
while(weight>=0)
{
numB += pow(10, weight) * (num[i]-'0');
--weight;
++i;
if(i==numLen) i=0;
}
//printf("%d %d\n", numA, numB);
printf("%.2f\n", numB*1.0/numA);
return 0;
}
标签:10,PAT,weight,int,1101,num,多少倍,Basic,numLen
From: https://www.cnblogs.com/tacticKing/p/17322643.html