尼文数
https://zoj.pintia.cn/problem-sets/91827364500/problems/91827364653
任意进制数字转换为十进制
$\sum_{i=0}^{k}x_i * b^i$ , $k$ 为数的位数,$b$ 为任意进制。其结果就是十进制数。
根据秦九韶算法:
$$
f(x) = a_nx^n + a_{n-1}x^{n-1} + … + a_1x + a_0
$$
$$ =(…((a_nx + a_{n-1})x)+a_{n-2})x+…+a_1)x+a_0 $$
那么就可以使用迭代的方式来求。
要注意是从最高项向外迭代,所以要从数字的最高位开始迭代计算。
// 输入进制和字符串 转 十进制数字:
string s;
int b;
cin >> b >> s;
int num = 0;
for(int i = 0 ; i < s.size() ; i++) // 这里的s[0] 为数字最高项
{
num = (s[i] - '0') + num * b;
}
#include <stdio.h>
#include <cstring>
#include <iostream>
using namespace std;
string s;
int main()
{
int t, b;
scanf("%d", &t);
while(t--) {
while(~scanf("%d", &b) && b) {
int sum = 0, num = 0, i;
cin >> s;
for(i = 0; i < s.size(); i++) {
sum += s[i] - '0';
num = num * b + s[i] - '0';
}
printf("%s\n", num % sum == 0 ? "yes" : "no");
}
if(t) printf("\n");
}
return 0;
}