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;
} 
posted @ 2017-10-10 17:45  ninding  阅读(274)  评论(0编辑  收藏  举报