本文主要是介绍Printing Books,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接
思路很好想,但是我这死脑筋就是用代码实现不了!!!太弱了…
思路就是,先求出最初的 x 由几位数组成,并算出比该位数字最大的数还要大1的数(y),然后算出x—y之间一共有多少(z)位。如果比n小,则用while循环,直到 z 小于n结束循环;否则,如果剩下的 n % k !=0 则输出 -1 ,等于零就输出 ans + n/k。
代码如下
#include <bits/stdc++.h>
#define ll long long
using namespace std;int main()
{ll n;ll x;int t;cin>>t;ll f[16];f[1]=10;for(int i=2; i<=15; i++){f[i] = f[i-1]*10;}while(t--){cin>>n>>x;ll m=x,k=1;while(m){m/=10;if(m>0)k++;}ll ans=0,flag=0;while(k*(f[k]-x)<=n){n-=k*(f[k]-x);ans+=(f[k]-x);x=f[k];k++;}if(n%k==0){cout<<ans+n/k<<endl;}else{cout<<-1<<endl;}}return 0;
}
代码参考于https://www.cnblogs.com/qywhy/p/9741795.html
这篇关于Printing Books的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!