每日一道编程题:niven 数

发布时间:2024年01月22日

题目

一个数的自身能够被其各位数之和整除,则称这个数为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;
}
文章来源:https://blog.csdn.net/Python_enjoy/article/details/135745450
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。