51nod 1770 数数字 找规律,注意进位,时间复杂度O(n)
题目:
这题很简单,找规律即可。
考虑两次进位:
1.a*b时的进位。
2.aa*b时加法时进位。
代码:
#include <bits\stdc++.h> using namespace std; int num[10]; int main(){ int a,b,d,n,t; cin >> t; while(t--){ cin >> a >> b >> d >> n; memset(num,0,sizeof(num)); if(n <= 5){ int t = n; int s = 0; while(t--){ s = s*10 + a; } s *= b; do{ num[s%10]++; s /= 10; } while(s != 0); }else{ int t = 3; int s = 0; while(t--){ s = s*10 + a; } s *= b; int ge = s%10; int shi = s/10%10; int bai = s/100%10; int qian = s/1000%10; if(qian != 0){ num[qian]++; } num[ge]++; num[shi]++; num[bai] += n-2; } cout << num[d] << endl; } return 0; }