C语言使用while循环计算数字各位之和的代码问题求解
问题根因
你当前代码输出数值异常偏大,和char数组类型本身无关,核心原因是你累加的是字符对应的ASCII编码值,而非字符代表的数字数值:数字字符'0'的ASCII值为48、'1'为49,以此类推,直接相加的结果自然会远高于预期。
解决方法
由于ASCII编码中数字字符是连续排列的,只需在累加时用arr[i] - '0'即可快速将字符转换为对应的整数数值。
调整后可运行代码
int main() { char arr[1000000]; int i = 0; int sum = 0; printf("type the number = "); scanf("%s", arr); while(arr[i] != '\0'){ // 只累加数字字符,过滤非法输入 if (arr[i] >= '0' && arr[i] <= '9') { sum = sum + (arr[i] - '0'); } i++; } printf("the total number is = %d", sum); return 0; }
可选优化建议
- 你定义的1MB大小char数组属于栈上变量,在部分栈空间限制较小的运行环境中可能触发栈溢出,如果需要处理超长数字,可以改为静态数组或者动态申请堆内存存储。
内容的提问来源于stack exchange,提问作者imnotarobot
相关产品推荐
相关产品推荐

