删数字(组合)

删数字

时间限制: 1 Sec  内存限制: 128 MB

题目描述

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

 

输入

第一行,一个正整数T。

 

输出

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

 

样例输入

复制样例数据

1256

样例输出

4

 

提示

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

连个范围都没有,我还以为要大数呢

只要从后面往前找5的每个位置,然后看5前面有多少位数,因为5后面都要删除,5前面可以选0个,1个.....

/**/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include <string>
#include <stack>
#include <queue>

typedef long long LL;
using namespace std;

char s[1005];
LL f[65];

int main()
{
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);

	f[0] = 1;
	for (int i = 1; i <= 62; i++) f[i] = f[i - 1] * 2;
	scanf("%s", s);
	int len = strlen(s);
	LL ans = 0;
	for (int i = len - 1; i >= 0; i--){
		if(s[i] == '5'){
			ans += f[i];
		}
	}
	printf("%lld\n", ans);

	return 0;
}
/**/

 

全部评论

相关推荐

牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务