[蓝桥杯]缩位求和

缩位求和

题目描述

在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。

比如:248×15=3720248×15=3720

把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是 1 位数,得

2+4+8=14==>1+4=52+4+8=14==>1+4=5;

1+5=61+5=6;

5×65×6

而结果逐位求和为 3。

5×65×6 的结果逐位求和与 3 符合,说明正确的可能性很大!!(不能排除错误)

请你写一个计算机程序,对给定的字符串逐位求和。

输入描述

输入描述

输入为一个由数字组成的串,表示 n (n<1000)n (n<1000) 位数;

输出描述

输出为一位数,表示反复逐位求和的结果。

输入输出样例

示例

输入

复制代码
35379

输出

复制代码
9

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 5516 | 总提交次数: 5917 | 通过率: 93.2%

难度: 中等 标签: 2018, 模拟, 省赛

方法思路

题目要求对输入的数字字符串反复进行逐位求和,直到结果变为一位数。解决思路如下:

  1. 循环计算:只要数字字符串长度大于1,就继续求和

  2. 逐位求和:遍历字符串的每个字符,将其转换为数字后累加

  3. 更新字符串:将求和结果转换为字符串,作为下一轮输入

  4. 终止条件:当字符串长度为1时,输出结果

这种方法利用了数字位数快速减少的特性(1000位数字求和后最多变为4位数,再求和最多变为2位数),因此效率很高。

cpp 复制代码
#include <iostream>
#include <string>
using namespace std;

int main() {
    string s;
    cin >> s;
    
    while (s.length() > 1) {
        int sum = 0;
        for (char c : s) {
            sum += c - '0';  // 字符转数字并累加
        }
        s = to_string(sum);  // 将求和结果转为字符串
    }
    
    cout << s << endl;
    return 0;
}

代码解释

  1. 输入处理 :读取数字字符串 s

  2. 循环求和

    • 当字符串长度大于1时继续循环

    • 初始化求和变量 sum = 0

    • 遍历字符串每个字符:c - '0' 将字符转换为对应数字并累加到 sum

    • 将求和结果 sum 转换为字符串,更新 s

  3. 输出结果:当字符串长度为1时,输出最终结果

示例说明

  • 输入 "35379"

    • 第一轮:3+5+3+7+9 = 27 → 字符串变为"27"

    • 第二轮:2+7 = 9 → 字符串变为"9"(输出)

  • 输入 "999"

    • 第一轮:9+9+9 = 27 → "27"

    • 第二轮:2+7 = 9 → 输出"9"

  • 输入 "0":直接输出"0"

  • 输入 "10":1+0=1 → 输出"1"

相关推荐
互联网杂货铺10 分钟前
unittest自动化测试实战
自动化测试·软件测试·python·测试工具·程序人生·职场和发展·测试用例
Code_流苏11 分钟前
Python趣学篇:从零打造智能AI井字棋游戏(Python + Tkinter + Minimax算法)
python·算法·游戏·tkinter·智能井字棋·minimax算法
Lu Yao_17 分钟前
【数据结构 -- B树】
数据结构·b树
理智的灰太狼20 分钟前
题目 3230: 蓝桥杯2024年第十五届省赛真题-星际旅行
算法·职场和发展·蓝桥杯
wcjwdq21 分钟前
“顶点着色器”和“片元着色器”是先处理完所有顶点再统一进入片元阶段,还是一个顶点处理完就去跑它的片元?
算法·着色器
技术帮扶户28 分钟前
Leetcode-7 寻找用户推荐人
算法·leetcode·职场和发展
VU-zFaith8701 小时前
C++概率论算法详解:理论基础与实践应用
c++·算法·概率论
全栈凯哥1 小时前
Java详解LeetCode 热题 100(23):LeetCode 206. 反转链表(Reverse Linked List)详解
java·算法·leetcode·链表
小葡萄20251 小时前
黑马程序员C++核心编程笔记--4 类和对象--多态
java·c++·笔记
iCxhust1 小时前
Prj09--8088单板机C语言8253产生1KHz方波(1)
c语言·开发语言·c++·单片机·嵌入式硬件·mcu