CodeForces - 102B - Sum of Digits

参考题目:CodeForces - 102B - Sum of Digits

题目描述

看过上一部哈利波特电影后,小杰拉德也决定练习魔法。他在父亲的魔法书中发现了一个咒语,可以将任何数字变成数字的总和。杰拉德得知这一点的那一刻,他遇到了一个数字 n。杰拉德可以给它施法多少次,直到数字变成一位数?

数据范围

0 ≤ n ≤ 1 0 10000 0 \le n \le 10^{10000} 0n1010000

分析

算法:模拟

如果不是一位数,就将所有位上的数字加和,注意第一次加和之后不会爆 int ,因为假设所有位数上的数字都为 9 ,加和也才 900000 ,然后再对 10 取模加和,统计一下次数。

需要特判一下一位数,cnt = 0

代码
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1e5 + 10;

char num[N];

int main()
{
    scanf("%s", num + 1);
    
    vector<int> res;
    int sum = 0, cnt = 1;
    
    int n = strlen(num + 1);
    
    if (n == 1) 
    {
        cout << 0 << endl;
        return 0;
    }
    
    for (int i = 1; i <= n; i ++ )
        sum += num[i] - '0';
    
    while (sum >= 10)
    {
        cnt ++ ;
        
        while (sum) res.push_back(sum % 10), sum /= 10;
        for (auto s : res) sum += s;
        res.clear();
    }
    
    cout << cnt << endl;
    
    return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值