一个数的自身能够被其各位数之和整除,则称这个数为Niven数。
例如:111是Niven数。因为111 mod (1+1+1)=0。
同样地, 我们也可以在另一个b进制数中指定一个数字,如果它的数字之和能够整除它,则b进制数中的该数字是Niven数。
例如:二进制数 1010是Niven数,因为:二进制数1010转为十进制后是10,而10 mod(1+0+1+0)=0;
给出 数制b (2<=b<=10) 和一个b数制的数,你要判断这个数是否是Niven数。
输入数据包含多组数据。
每个测试数据占一行,先是数制b,之后是一个合法的数制中的数。
b为0表示测试块结束。
如果该数在该数制为Niven数,就输出"yes",否则输出"no"。
两个测试块之间用空行隔开。
10 111
2 110
10 123
6 1000
8 2314
0
yes
yes
no
yes
no
#include <bits/stdc++.h>
using namespace std;
bool niven(string a,int b)
{
int sjz=0,tot=0,cur=1;
for(int i=0; i<a.length(); i++)
{
tot+=(a[i]-'0');
}
for(int i=a.length()-1; i>=0; i--)
{
sjz+=(a[i]-'0')*cur;
cur*=b;
}
return sjz%tot==0;
}
int main()
{
string a;
int b;
while(cin>>b && b!=0)
{
cin>>a;
if(niven(a,b))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}