問題文
整数 X を十進法で表したときの各桁の数字の和を f(X) としたとき、X が f(X) で割り切れる場合、X はハーシャッド数である。
整数 N が与えられるので、ハーシャッド数かどうか判定せよ。
制約
1≦N≦10^8
入力は全て整数
/////////////////////////////////////////////////////////////////
上記の問題において、
int型で整数入力を受け取り、string型のSに変換、Sの要素をひとつづつ調べてf(x)を求める、という方針を立て、
#include <bits/stdc++.h>
using namespace std;
int main() {
int N, x = 0;
string S;
cin >> N;
S = to_string(N);
for(int i = 0;i < sizeof(S);i++){
for(int j = 0;j < 10;j++){
if(S[i] == j){
x += j;
}
}
}
if(N % x == 0){
cout << "Yes" << endl;
}
else{
cout << "No" << endl;
}
}
というプログラムを書きました。
結果として、実行時エラーとして
./Main.cpp: In function ‘int main()’:
./Main.cpp:12:19: warning: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Wsign-compare]
12 | for(int i = 0;i < sizeof(S);i++){
| ~~^~~~~~~~~~~
となってしまいました。
調べたところ、「符号の異なる整数式の比較をしている」と分かったのですが、iと配列の大きさを比べる式において、0≦iとしているのにこのエラーになってしまった原因がわかりませんでした。
また、そもそもこの問題に対してこのプログラムではできない、このプログラムでは間違っているという場合は改善点などを教えていただけるとありがたいです。
よろしくお願いします。
![guest](/img/icon/icnUserSample.jpg)
回答2件
あなたの回答
tips
プレビュー