2019年PAT秋考B-1 1101 B是A的多少倍 题型:模拟 15分 一次过

95 阅读1分钟

1101 B是A的多少倍 - PAT (Basic Level) Practice (中文) (pintia.cn)

自己写的STL解法

坑点:刚开始就要把x保留下来,否则最后计算结果的时候x的值已经变了。

思想

先把后n位保留到v里面,比如54,然后逆转一下变为45.

再把剩下的部分保留到vv里面,比如321,再逆转一下变为123,。

最后合并变为45123

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int>v;
vector<int>vv;
int sum;
int main()
{
    int x, n; cin >> x >> n;
    int val=x;  //这里一定要把x的值先保留下来,最后一步要用到初始x
    while (n--)
    {
        v.push_back(val % 10);
        val /= 10;
    }

    while (val)
    {
        vv.push_back(val%10);
        val /= 10;
    }
    reverse(v.begin(),v.end());
    reverse(vv.begin(),vv.end());

    for (auto ch : v)sum = sum * 10 + ch;
    for (auto ch : vv)sum = sum * 10 + ch;
  

    double ans=sum*1.0/x;
    printf("%.2f", ans);
    return 0;
}

别人的代码

image.png

二刷

自己写的字符串解法

#include <bits/stdc++.h>
using namespace std;

int main() {
	string s;
	int D;

	cin >> s >> D;

	int len = s.size();
	string qian = s.substr(len - D, D);
	string hou = s.substr(0, len - D);

	string s2 = qian + hou;


	int num1 = stoi(s);
	int num2 = stoi(s2);


	double ans = num2 * 1.0 / num1;

	printf("%.02f", ans);
	return 0;
}

image.png