ccf151201-位数之和

题目

问题描述
  给定一个十进制整数n,输出n的各位数字之和。
输入格式
  输入一个整数n。
输出格式
  输出一个整数,表示答案。
样例输入
20151220
样例输出
13
样例说明
  20151220的各位数字之和为2+0+1+5+1+2+2+0=13评测用例规模与约定
  所有评测用例满足:0 ≤ n ≤ 1000000000

思路

我的想法是将以string类型进行输入,然后处理每一位。本来想着用string库里的stoi()/atoi()函数将string转成int,但是sum+=atoi(num[i]);这样的用法会报错,提示“invalid conversion from 'char' to 'const char*' [-fpermissive]”。

看一下atoi()函数的原型

int atoi(const char *str );
功能:把字符串转换成整型数。
str:要进行转换的字符串
返回值:每个函数返回 int 值,此值由将输入字符作为数字解析而生成。如果该输入无法转换为该类型的值,则atoi的返回值为 0

就可以看出来为什么报错了,也就是atoi()希望的输入是一个字符串文本,而不是num[i]这样单个的字符。

直接用num[i]-'0'将单个字符转换成int就好了,因为如果每个字符都是数字,那么num[i]的值就是'0'-'9',减去'0'的字符ASCII码的差值就恰好是这个数字。

题解

#include<iostream>
#include<string>
using namespace std;

int main(){
    string num;
    cin>>num;
    int sum=0;
    for(int i=0;i<num.size();i++){
        sum+=num[i]-'0';
    }
    cout<<sum<<endl;
    return 0;
}

 

posted @ 2019-09-10 19:31  闲不住的小李  阅读(194)  评论(0编辑  收藏  举报