数位和[蓝桥杯2017决赛]

题目链接:数位和
时间限制: 1 Sec 内存限制: 256 MB

题目描述:
数学家高斯很小的时候就天分过人。一次老师指定的算数题目是:1+2+…+100。
高斯立即做出答案:5050!
这次你的任务是类似的。但并非是把一个个的数字加起来,而是对该数字的每一个数位作累加。这样从1加到100的“和”是:901
从10加到15是:21,也就是:1+0+1+1+1+2+1+3+1+4+1+5,这个口算都可以出结果的。
按这样的“加法”,从1加到1000是多少呢?
输出:
输出一个整数表示答案

题意:就是求出1到1000的每个数的数位和再累加起来,然后输出累加的结果。
思路:遍历一遍,写个函数求每个数的数位和。

求数位和的函数代码:

int f(int n)
{
    
    
    int n_sum=0;  //存放数位和结果
    while(n) //每位都加完后,n变为0了,循环就结束了
    {
    
    
        int temp=n%10; //求出每一位的数(最后面的那位数字)
        n_sum+=temp; // 每位数累加上去
        n/=10; //最后一位累加过后,将n除以10(让百位变十位,十位变个位,以此类推)
    }
    return n_sum; // 返回n这个数的数位和
}

聪明的你一定看懂了吧[嘻嘻]
在这里插入图片描述
然后我们要做的就是遍历一遍,然后不断调用那个求数位和的函数,设置个临时变量,接收着返回的每个数的数位和,然后不断累加给sum,然后我们最后输出sum即可,我们也可以把代码注释掉,然后只打印输出结果也可以。

完整代码:

#include<iostream>
using namespace std;
typedef long long ll;

int f(int n)
{
    
    
    int n_sum=0;
    while(n)
    {
    
    
        int temp=n%10;
        n_sum+=temp;
        n/=10;
    }
    return n_sum;
}

int main()
{
    
    
    ll sum=0;
    for(int i=1;i<=1000;i++)
    {
    
    
        int x=f(i);
        sum+=x;
    }
    cout<<sum<<endl;
    return 0;
}

小可爱们看完别忘了点赞哟,谢谢支持!
如果你是电脑端,还可以看到右下角的 “一键三连” ,没错点它[哈哈]

在这里插入图片描述
加油!

共同努力!

Keafmd

猜你喜欢

转载自blog.csdn.net/weixin_43883917/article/details/109255775
今日推荐