C/C++教程

C++ -- 删数字

本文主要是介绍C++ -- 删数字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

奶牛在数学课上学习了整除的概念。农夫Farmer John为了考验它的数学水平,于是在白纸上写了正整数T。由于农夫不喜欢数字0,所以正整数T是不含数字0的。奶牛可以删除T的若干位数字,剩下来的数字从左到右构成一个正整数P,使得正整数P必须是5的倍数。奶牛有多少种不同的删除方案?具体请看样例解释。

输入

第一行,一个正整数T。

输出

一个整数,奶牛不同的删除方案数。
1、奶牛可以删除0个数字(即不删除任何数字)。
2、奶牛不能把T全部删除掉。即至少要剩下1位数字。
3、由于T的位数可能较长,建议用字符串形式读入。
 

样例输入 Copy

1256

样例输出 Copy

4

提示

奶牛有4种不同的删除方案:
第1种方案:删除T的第四位数字,剩下的P=125,是5的倍数。
第2种方案:删除T的第一位和第四位数字,剩下的P=25,是5的倍数。
第3种方案:删除T的第二位和第四位数字,剩下的P=15,是5的倍数。
第4种方案:删除T的第一位、第二位、第四位数字,剩下的P=5,是5的倍数。

解题思路:数字中5 后面的数都要删除,而5前面的数每多一位就多了一种组合方式。

Code:

#include <iostream>
#include <stdio.h>

using namespace std;

const int N = 100010;
typedef long long LL;

string s;
LL a[N], ans;

signed main()
{
	cin >> s;
	a[0] = 1;
	for(int i = 1; i <= 80; i ++ )  a[i] = a[i - 1] * 2;
	for(int i = s.size() - 1; i >= 0; i -- )
	{
		if(s[i] == '5')
		{
			ans += a[i];
		}
	}
	cout << ans << endl;
}

这篇关于C++ -- 删数字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!