Hdu3555
Returns t n, and returns 1 ~ for each N ~ N contains 49 numbers (such as 49,449,123, and)
[Cpp]
# Include <iostream>
# Include <cstring>
# Include <cstdio>
# Include <cmath>
Using namespace std;
_ Int64 N, dp [33] [3], sum;
Int bit [33];
Int main ()
{
Int I, j, T, len;
Memset (dp, 0, sizeof (dp); dp [0] [0] = 1;
For (I = 1; I <= 20; I ++ ){
Dp [I] [0] = dp [I-1] [0] * 10-dp [I-1] [1];
Dp [I] [1] = dp [I-1] [0];
Dp [I] [2] = dp [I-1] [1] + dp [I-1] [2] * 10;
}
Scanf ("% d", & T );
While (T --){
Scanf ("% I64d", & N );
N ++;
Len = sum = 0;
While (N ){
Bit [++ len] = N % 10;
N/= 10;
}
Bit [len + 1] = 0;
Bool flag = 0;
For (I = len; I> = 1; I --){
Sum + = dp [I-1] [2] * bit [I];
If (! Flag & bit [I]> 4) sum + = dp [I-1] [1];
If (flag) sum + = dp [I-1] [0] * bit [I];
If (bit [I + 1] = 4 & bit [I] = 9) flag = 1;
}
Cout <sum <endl;
}
Return 0;
}
/*
*/
# Include <iostream>
# Include <cstring>
# Include <cstdio>
# Include <cmath>
Using namespace std;
_ Int64 N, dp [33] [3], sum;
Int bit [33];
Int main ()
{
Int I, j, T, len;
Memset (dp, 0, sizeof (dp); dp [0] [0] = 1;
For (I = 1; I <= 20; I ++ ){
Dp [I] [0] = dp [I-1] [0] * 10-dp [I-1] [1];
Dp [I] [1] = dp [I-1] [0];
Dp [I] [2] = dp [I-1] [1] + dp [I-1] [2] * 10;
}
Scanf ("% d", & T );
While (T --){
Scanf ("% I64d", & N );
N ++;
Len = sum = 0;
While (N ){
Bit [++ len] = N % 10;
N/= 10;
}
Bit [len + 1] = 0;
Bool flag = 0;
For (I = len; I> = 1; I --){
Sum + = dp [I-1] [2] * bit [I];
If (! Flag & bit [I]> 4) sum + = dp [I-1] [1];
If (flag) sum + = dp [I-1] [0] * bit [I];
If (bit [I + 1] = 4 & bit [I] = 9) flag = 1;
}
Cout <sum <endl;
}
Return 0;
}
/*
*/