刪數字(組合)
阿新 • • 發佈:2018-12-06
刪數字
時間限制: 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; } /**/