L1-046 整除光棍(高精除的处理)

简介: L1-046 整除光棍(高精除的处理)

描述:


这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由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个空格分隔。


思路:高精除的处理


#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const ll maxx = 1e18;
const int N = 1e5+100;
const int p = 1e4+10;
const double eps = 1e-8;
int k;
int kk;
int main()
{
  cin>>k;
  while(1)
  {
    int s=0;
    kk++;
    for(int i=1;i<=kk;i++)
    {
      s=s*10+1;
      if(s>=k) s%=k;
    }
    if(s==0) break;
  }//模拟找到最小目标序列的长度
  int s=0,flag=0;
  for(int i=1;i<=kk;i++)
  { 
    s=s*10+1;
    if(s>=k)
    {
      cout<<s/k;
      s%=k;
      flag=1;
    }
    else
    {
      if(flag==1) cout<<"0";
    }
  }//模拟高精除输出运算后的数
  cout<<" "<<kk;//输出最小长度
}


反思:


1.注意运算后的数的前缀0的处理问题,用一个flag来处理前缀0

2.多复习高精,注意高精除的写法,先扩大倍数后进行运算


目录
相关文章
|
前端开发
layui在上传图片在前端处理图片压缩
layui在上传图片在前端处理图片压缩
322 0
|
搜索推荐 安全 Android开发
如何优化安卓应用的用户体验
【2月更文挑战第9天】在当今移动互联网时代,安卓应用已成为人们日常生活中不可或缺的一部分。然而,用户对应用的使用体验越来越苛刻,一个不好的应用体验很容易导致用户的流失。本文将介绍如何从多个方面优化安卓应用的用户体验。
|
存储 算法 Python
python 无重复字符的最长子串 多种解法
python 无重复字符的最长子串 多种解法
|
设计模式 算法 Java
C++设计模式
C++设计模式
73 0
|
前端开发 IDE JavaScript
【安装指南】HBuilder X 下载、安装详细教程
【安装指南】HBuilder X 下载、安装详细教程
3910 0
|
算法
[Leedcode]刷题有感--对称二叉树 与 子二叉树
[Leedcode]刷题有感--对称二叉树 与 子二叉树
|
搜索推荐 算法
深入浅出排序算法之基数排序
深入浅出排序算法之基数排序
Python小姿势 - import requests
Python小姿势 - import requests
|
JavaScript
安装Vue/Vue脚手架
安装Vue/Vue脚手架
250 0
安装Vue/Vue脚手架
|
编译器 Windows
Latex(TeX Live+TeXStudio)安装教程
本文主要介绍Latex(TeX Live+TeXStudio)的安装教程。
Latex(TeX Live+TeXStudio)安装教程