奶牛在数学课上学习了整除的概念。农夫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; }