☀L1-046学士号を割る(20点)[PTA] [数論] [アナログ除算]

ここでいういわゆる「学士」とは、一人を意味するものではありません〜1、11、111、1111など1からなる数字です。伝説によると、学士号は5で終わらない奇数で割り切れる可能性があります。たとえば、111111は13で割り切れる可能性があります。ここで、プログラムは整数を読み取るx必要があります。この整数は奇数で、5で終わっていない必要があります。次に、計算後、2つの数値を出力します。最初の数値sx乗数sが学士であることを示し、2番目の数値nは学士の桁数ですもちろん、そのような解決策はユニークではありません。問題は、最小の解決策を出力する必要があります。

ヒント:明らかな方法は、独身者の数を徐々に増やして、均等に分割できるようにすることxです。ただし、s非常に大きな数になる可能性があるという問題があります。たとえば、プログラムが31と入力すると、31に358429390681を掛けた結果が111111111111111、合計15になるため、3582259390681と15が出力されます。

入力フォーマット:

1行に5で終わらない正の奇数x(<1000)を入力します。

出力フォーマット:

sn、の間のスペースで区切られた、対応する最小出力

入力サンプル:

31

サンプル出力:

3584229390681 15

ACコード:

//  main.cpp
//  猫猫头
//
//  Created by Mintink on 2020/1/12.
//  Copyright © 2020 Mintink. All rights reserved.
//

#include<iostream>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iomanip>
#include<set>
#include<numeric>
#include<vector>
#include<queue>
#include<array>
#include <stdlib.h>
#include <stdio.h>
#include<cstdio>
#define _USE_MATH_DEFINES
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
//tuple<int,string,int>p[55];
//pair<int,string>male[55],female[55];
priority_queue<ll,vector<ll>,greater<ll> >qa;//升序,大根堆
priority_queue<ll>qd;//降序,小根堆
//const int mod=10e9+7;
typedef long long  ll;
//vector<int>v;
/*
//Max common factor
ll gcd(ll a,ll b)
{
    ll m;
    m=a%b;
    while(m!=0)
    {
        a=b;
        b=m;
        m=a%b;
    }
    return b;
}*/
int main()
{
    int x;
    cin>>x;
    int n=1;
    ll s=1;
    while(s<x)
    {
        s=s*10+1;
        n++;
    }
    while(1)
    {
        cout<<s/x;
        if(s%x==0)
            break;
        s=(s%x)*10+1;
        n++;
    }
    cout<<" "<<n<<endl;
    return 0;
}

 

おすすめ

転載: blog.csdn.net/qq_43660826/article/details/108475921