Problem Description
A Niven number is a number such that the sum of its digits divides itself. For example, 111 is a Niven number because the sum of its digits is 3, which divides 111. We can also specify a number in another base b, and a number in base b is a Niven number if the sum of its digits divides its value.
Given b (2 <= b <= 10) and a number in base b, determine whether it is a Niven number or not.Input
Each line of input contains the base b, followed by a string of digits representing a positive integer in that base. There are no leading zeroes. The input is terminated by a line consisting of 0 alone.
Output
For each case, print “yes” on a line if the given number is a Niven number, and “no” otherwise.
Sample Input
10 111
2 110
10 123
6 1000
8 2314
0Sample Output
yes
yes
no
yes
no
下面的程序命名能够正确运行,没有找到问题,结果一直是wrong answer。之后换了hoj 1014 Niven Numbers的程序结果正确运行了。这个程序和主流程序的不同仅仅是输入按照int,通过取余的方法获得每一位的数,而其他程序是直接转换为字符数组。通过输出每一个变量的方法判断,均符合预期,仍未找到问题所在。
#include <iostream>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int intpow(int a,int b){
if(b==0)return 1;
int n=a;
for(int i=b-1;i>0;i--){
n*=a;
}
return n;
}
int main()
{
// vector<string> v;
int b,n;
while(scanf("%d",&b)&&b){
scanf("%d",&n);
int a[100];
int i;
int s=0;
for(i=0;n!=0;i++){
a[i]=n%10;
n/=10;
}
for(i--;i>=0;i--){
n+=a[i]*intpow(b,i);
s+=a[i];
}
if(n%s==0)cout<<"yes"<<endl;//v.push_back("yes");
else cout<<"no"<<endl;//v.push_back("no");
}
// vector<string>::iterator it;
// for(it=v.begin();it!=v.end();it++)cout<<*it<<endl;
return 0;
}