蓝桥杯2018年第九届真题——缩位求和(C/C++)

缩位求和


一、题目内容

题目描述

在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。比如:248 * 15 = 3720,把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得
2 + 4 + 8 = 14 ==> 1 + 4 = 5;
1 + 5 = 6
5 * 6
而结果逐位求和为 3,5 * 6 的结果逐位求和与3符合,说明正确的可能性很大!(不能排除错误)请你写一个计算机程序,对给定的字符串逐位求和。

输入

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

输出

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

样例输入

35379

样例输出

9

二、思路分析

        题目比较好理解,就是逐位求和,最终输出一位数。用字符串输入应该比较好处理。方法二就是正常通过循环,/,%的操作实现的,稍微复杂一点。方法一利用C++STL的一个函数,将数值再次转换为字符串,从而更新字符串的内容。

string to_string(numberic_value);

        这个函数是在C++11标准中定义的,是以<string>标头的库函数,用于将数值(数字)转换为字符串。在函数中string是返回类型,即函数返回一个字符串对象,其中包含字符串格式的数字值,numbric_value是可以为整数,浮点数,长整数,双精度数的数字。

        using namespace std;  是一条语句,告诉编译器使用名为std的命名空间,如果我们不编写此语句,则需要对所有函数、对象使用std :: 。


三、代码实现

方法一:

#include <bits/stdc++.h>
using namespace std;

int main() {
	string s;
	cin >> s;
    int sum = 0;
	while (s.length() != 1) { //循环终止条件,字符串s只剩一位
		sum = 0; //每次循环前置零
		for (int i = 0; i < s.length(); ++i) {
			sum += (s[i] - '0'); //char转int
		}
		s = std::to_string(sum); //将字符串s更新s
    }
	cout << s << endl;
	return 0;
}

 方法二:

#include <bits/stdc++.h>
using namespace std;

int main() {
	string s;
	cin >> s;
	int sum = 0;
	for (int i = 0; i < s.length(); i++) { //第一次逐位求和
		sum += (s[i] - '0'); //char转int
	}
	int t = sum;
	while (t >= 10) { //再次逐位求和,直到为一位数
		t = 0;
		while (sum) {
			t += sum % 10;
			sum /= 10;
		}
		sum = t;
	}
	cout << t << endl;

	return 0;
}

加油哦! 如有错误和需要改进完善之处,欢迎大家纠正指教。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值