質問の意味:
あなたN、K。これは、すべての間隔Xを満たすX%K == 0内で見つける次いでXすべてのビットを加算(すなわち、X%10)、出力させるために、この範囲[1、N]に示されています。
たとえば、次のように入力102
数が246810を満たしています
次いで、2%、4%10 + 10 + 10 + 8%6%10%10 = 10 + 20
そして、出力20
ソリューション:
x%のK == X 0を満たし、それは確かに、Kの因子及びyの積、すなわち、1 * K、2 * K、3 * kを、4 * K ......(Y <= N /ありますK)
我々は、同じビット11 * kビットと1 * kの数、すなわち、(11 * K)%10 ==(1 * K)10%を見つけます。
よく確かに存在する(21 * K)%10 ==(1 * K)%10 ...............
したがって、我々は、すべての(iはkは*)10%(1 <= iが<= 9)、次いで一緒に添加知る必要があります
そして、yのを見てする数である、あなたは、特定のコードを見ることができるものを手に入れます!
コード:
1の#include <stdio.hの> 2の#include < ストリング・H> 3の#include <iostreamの> 4の#include <アルゴリズム> 5 使って 名前空間STDを、 6 のconst int型 MAXN = 15 。 7 typedefの長い 長いLL。 8 LL V [MAXN]、[MAXN]合計。 9 INT メイン() 10 { 11 のLL T。 12 cinを>> トン。 13 一方(t-- ) 14 { 15 のLL N、M。 16 CIN >> N >> M。 17 18 のために(LL i = 1 ; iは= < 9 ++; I) 19 V [I] =(i *がM)%10、和[I] =和[I- 1 ] + [I] V。 20 であれば(N < M) 21 { 22 のprintf(" 0 \ n " ); 23 続け; 24 } 25 N / = M。 26 = M%10 。 27 LL SUMM = 0 、ANS。 28の ANS = N / 10 。 29 LLのQ = N%10 。 30 // のprintf( "%D%LLD%D \ n"は、N、ANS、Q)。 31 SUMM = ANS *和[ 9 ]。 32 SUMM + = 和[Q]。 33 のprintf(" %I64dの\ n " 、SUMM)。 34 } 35 リターン 0 。 36 }