cf 数制转换 C. Vanya and Scales

题目链接

http://codeforces.com/problemset/problem/552/C

题意:

利用已知的w0, w1, w2, ..., w100

这101个砝码,用天平算出m的质量

思路:

根据给的砝码,我们可以想到利用w进制来表示这些砝码,那么每个砝码的大小就是1,10,100.......

然后要计算出m的质量,我们将m也表示为w进制的数

然后对于每位数我们进行分析

每个砝码存在三种情况不取,取,减去(*0,*1,*-1)

因为砝码的为1,10,100,1000,,,,

m的第i位数,如果是0,1,那么第i个砝码可以选择不取,和取

如果是w-1,那么就加上第i个砝码使这位数为0,同时下一位数要+1

如果是w,那么就下一位数+1

最后如果每位数都满足条件则可以算出m的质量

下面是代码:

</pre><pre name="code" class="cpp">#include <algorithm>
#include <cstdio>
#include <iostream>
#define MAX 105
int mp[MAX];
using namespace std;
int main(void)
{
	int w,m,p;cin >> w >> m;
	int ans = 0,flag = 1;
	while(m){
		mp[++ans]=m%w;
		m/=w;
	}
	for(int i = 1;i<=ans;i++){
		if(mp[i]==0 || mp[i]==1)continue;
		if(mp[i]==w-1 || mp[i]==w){mp[i+1]++;continue;}
		else{
			flag = 0;
			break;
		}
	}
	if(flag)cout << "YES";
	else cout << "NO";
}






你可能感兴趣的:(数论)