第二次周赛白银组G题

https://vjudge.net/contest/275895#problem/G

做题的时候被自己的递归绕晕了,原来可以分割的每2个数相加再分割,这样子就能省去很多麻烦,实在是没有想到。简单意思就是比如777,我一开始的想法是,7+7+7=21,21最后再分割成1+2=3。最好的其实是7+7=14,分割成1,4,再用5+7=12,分割最后得到3.还有就是用字符数组来做数字输入会方便很多,得到的每一位最后再减去‘0’便可以得到整形数。还有就是运用for语句的终止可以是\0前的一位数,这样会方便很多。

#include <iostream>
using namespace std;
int main()

{

	int s, i;

	char n[2000];

	while (cin>>n)

	{

		if (n[0] == '0')//遇到输入0就跳出结束循环

			break;

		s = 0;

		for (i = 0; n[i]; i++)//终止条件是\0前一位

		{
			cout << n[i] << endl;
			s = s + n[i] - '0';//分割每一个数

			if (s >= 10)

				s = s / 10 + s % 10;//每得到2个数字做相加大于10的话就做一次分割

		}

		cout << s << endl;

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值