C++判断数字能否被各位和整除的代码问题求助
问题分析与解决
你的核心问题出在字符到数字的转换逻辑上:s[i-1]是char类型,直接加到a里时,实际累加的是该字符的ASCII码值,而非对应的数字本身。
比如测试数字12时:
s的值是"12",s[0]是字符'1'(ASCII码49),s[1]是字符'2'(ASCII码50)- 循环执行后
a = 49 + 50 = 99 - 12 % 99 = 12 ≠ 0,所以输出
NO,和预期不符
修正代码
只需要在累加时把字符转换为对应的数字,方法是减去字符'0'(ASCII码48),这样'1'-'0'=1,'2'-'0'=2,就能得到正确的数字值:
#include <bits/stdc++.h> using namespace std; int main() { long long n, a=0; string s; cin>>n; s=to_string(n); for (long long i=1; i<=s.size(); i++){ a = a + (s[i-1] - '0'); // 减去'0'完成字符到数字的转换 } if (n%a==0){cout<<"YES";} else {cout<<"NO";} return 0; }
测试数字12时,a会计算为1+2=3,12%3=0,输出YES,符合预期。
内容的提问来源于stack exchange,提问作者Anh Trí Hoàng
相关产品推荐
相关产品推荐

