zoukankan      html  css  js  c++  java
  • csu 1392 Number Trick (数论)

    题意:输入一个数x 从小到大输出所有满足 (k*leny+y)*x=y*10+k 的 k*leny+y

    思路:因为x 为浮点数 所以等式两边都要乘 1e4

            将等式化为 k(leny*x-1)*1e4=y(1e5-x*1e4)

            可以通过枚举 len k 来求出y是否存在 存在时位数又是否符合条件

            这题坑点略多 还好问了凯神 不然坑死= =

             首先 转化 x时要注意浮点误差 x=(int)(lx*10000+0.5);

             其次 由于等式两边有可能为0 求出的y也就为0 即该数为个位数时

            所以对这种情况进行特判         

            printf("%d",k);
            if(y>0) printf("%d",y);
               printf(" ");

             

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define ll long long
    int len(int n)
    {
        int res=1;
        for(int i=1;i<n;i++)
        {
            res*=10;
        }
        return res;
    }
    int digit(long long num)
    {
        int cnt=0;
        while(num)
        {
            num/=10;
            cnt++;
        }
        return cnt;
    }
    int main()
    {
        long long leny,y;
        int k;
        double lx;
        int i,j;
        while(scanf("%lf",&lx)!=EOF)
        {
            int ok=0;
            ll x=(int)(lx*10000+0.5);
            if(lx>=10)
            {
                printf("No solution
    ");
                continue;
            }
            ll leny=1;
            for(i=0;i<=7;i++)
            {
                for(k=1;k<=9;k++)
                {
                    long long temp=(long long)k*((long long)(leny*x)-1e4);
                    long long temp1=1e5-x;
    
                    if(temp%temp1!=0) continue;
                    y=temp/temp1;
                    if(digit(y)==i)
                    {
                        if(ok==0) ok=1;
                        printf("%d",k);
                        if(y>0) printf("%d",y);
                        printf("
    ");
                    }
                }
                leny*=10;
            }
            if(ok==0) printf("No solution
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    java注解-笔记
    java重载与重写-笔记
    java中(equals与==)- 笔记
    Java迭代与递归-笔记
    C++指针悬挂-笔记
    极速倒入sql记录到excel表格,19个子段5万条记录只需30秒
    利用MCI的方法可以方便的实现光驱门的开关
    如何让你的程序在任务列表隐藏
    如何实现遍历文件夹中的所有文件
    识别操作系统版本
  • 原文地址:https://www.cnblogs.com/sola1994/p/4393453.html
Copyright © 2011-2022 走看看