给定表示书的总页码的十进制整数n计算书的全部页码中分别用到多少次数字0,1,2,3,4,5,6,7,8,9

算法设计:给定表示书的总页码的十进制整数n(1<=n<=10^9)计算书的全部页码中分别用到多少次数字0,1,2,3,4,5,6,7,8,9数据输入:输入数据由文件名为input.txt提供。每个文件只有一行,给出表示总页码总数结果输出将计算结果输出到文件output.txt输出文件共10行,在第K行输出页码中用到数字K-1的次数*/

#include
#include
#include
#include
using namespace std;
/*算法设计:给定表示书的总页码的十进制整数n(1<=n<=10^9)计算书的全部页码中分别用到多少次数字0,1,2,3,4,5,6,7,8,9
 *数据输入:输入数据由文件名为input.txt提供。每个文件只有一行,给出表示总页码总数
 *结果输出将计算结果输出到文件output.txt输出文件共10行,在第K行输出页码中用到数字K-1的次数*/
int f1(int n,int a)
{
     

    int di=1,sum=0;
    int right,left=n,key;
    while(left!=0)
    {
     
        left=n/(di*10);
        key=n%(di*10)/di;
        right=n%(di*10)%(di);
        if(a==0)
        {
     
            if(key==0)
                sum+=(left-1)*di+right+1;
           else
               sum+=left*di;
        }
        else
        {
     
            if(a<key)
                sum+=(left+1)*di;
            else if(a==key)
                sum+=left*di+right+1;
            else
                sum+=left*di;
        }
        di*=10;
    }
    return sum;
}
int main()
{
     
    ifstream in("/home/ying/input.txt");
    int a;
    in>>a;
    in.close();
    ofstream out("/home/ying/output.txt");
    for(int i=0;i<10;i++)
        out<<f1(a,i)<<endl;
    out.close();
}

你可能感兴趣的:(算法,#,算法概述,算法)