PAT练习集之20分题-L1-046. 整除光棍

xiaoxiao2021-02-28  39

L1-046. 整除光棍

时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 翁恺

这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被一个不以5结尾的奇数整除。比如,111111就可以被13整除。 现在,你的程序要读入一个整数x,这个整数一定是奇数并且不以5结尾。然后,经过计算,输出两个数字:第一个数字s,表示x乘以s是一个光棍,第二个数字n是这个光棍的位数。这样的解当然不是唯一的,题目要求你输出最小的解。

提示:一个显然的办法是逐渐增加光棍的位数,直到可以整除x为止。但难点在于,s可能是个非常大的数 —— 比如,程序输入31,那么就输出3584229390681和15,因为31乘以3584229390681的结果是111111111111111,一共15个1。

输入格式:

输入在一行中给出一个不以5结尾的正奇数x(< 1000)。

输出格式:

在一行中输出相应的最小的s和n,其间以1个空格分隔。

输入样例: 31 输出样例: 3584229390681 15

#include<bits/stdc++.h> #define ms(a,x) memset(a,x,sizeof(a)) using namespace std; typedef long long ll; int gcd(int a,int b){ if(b==0)return a; return gcd(b,a%b);} int lcm(int a,int b){ return a/gcd(a,b)*b;} int main(){ int n; //cin>>n; while(cin>>n&&(n%2!=0&&n%5!=0)){ string res=""; int len = 0,tmp=1; while(1){ len++; if(res.size()||tmp/n) { res+=('0'+tmp/n); } tmp%=n; if(tmp==0){ cout<<res<<" "<<len<<endl; break; } tmp=tmp*10+1; } } return 0; }喵喵喵?你还看得懂么。。。。反正我是忘记了当时的心路历程。。
转载请注明原文地址: https://www.6miu.com/read-2625098.html

最新回复(0)