每日一道编程题:niven 数

本文介绍了一种算法,用于判断给定的b进制数是否为Niven数,即其数字之和能否整除该数。程序通过计算数字之和并进行模运算实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

一个数的自身能够被其各位数之和整除,则称这个数为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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值