琪露諾的完美算數教室 的統計I

2021-07-11 14:36:32 字數 2061 閱讀 6568

問題描述

眾所周知,琪露諾(チルノ,cirno)是幻想郷 (げんそうきょう)中首屈一指的天才,可以說⑨就是她的代名詞。

然而如今,她遇到了乙個和⑨有關的難題。你能幫助她麼?

題目是這樣的,給出兩個數 a 和 b (0 <= a <= b <= 10^10000),求 a 到 b 之間(包括a和b)的數字中,有多少個數字是包含9的(例如 19,910 等都是包含9的數字)。

輸入

第一行為乙個數字 t (0 < t <= 100) 表示資料組數。

之後的 t 行,每行包含兩個數 a 和 b (0 <= a <= b <= 10^10000)。

輸出

對每組資料輸入,輸出乙個數字,表示 a 到 b 之間的數字中(包括a和b),有多少個數字是包含9的。(注意:答案可能很大)

測試輸入

期待的輸出

時間限制

記憶體限制

額外程序

測試用例 1

以文字方式顯示

1↵0 9↵

以文字方式顯示

1↵1秒64m0

題解思路

整體思路:

整體思路就是以高精度演算法為工具,以黃軒成大神的結論:(0,a) 中 含9的數字的個數是( a[0]*10^4 + a[1]*10^3 + a[2]*10^2 + a[3]*10 + a[4] ) 減去 ( a[0]*9^4 + a[1]*9^3 + a[2]*9^2 + 0 + 0 ) 為導向進行計算。 分別計算出小於a和小於b的數中含9的數的多少,然後相減就可以了。

具體方法:

首先是資料讀入,可以用getchar()讀入然後一位一位的處理,也可以用%s讀入然後再一位一位的處理。中間的一位一位的處理過程主要就運用到了秦九韶演算法,( a[0]*10^4 + a[1]*10^3 + a[2]*10^2 + a[3]*10 + a[4] ) = ((((a[0]*10+a[1])*10+a[2])*10+a[3])*10+a[4]) 也就是每讀一位就 *10+x 

( a[0]*9^4 + a[1]*9^3 + a[2]*9^2 + 0 + 0 ) = ((((a[0]*9+a[1])*9+a[2])*9+0)*9+0) ;對於上面的第一步,其實本質含義就是把字串轉化為整形的數,對於第二個計算式就是用乙個陣列來計數,每讀一位就進行一次陣列乘9然後加上這一位的數值。注意中間需要判斷一下,如果讀入的數裡面有9那麼以後就只用乘9不用再加每一位上的數字了,這個標記一下就好。這樣就可以把小於a,小於b的數中含9 的數找到相減就可以了,注意一下如果b中含有9那麼最後的結果要+1.然後就是編寫高精度加法,減法,高精度乘低精度乘法的函式了,跟前不久寫的高精度很類似,只是把進製改一下,程式微調一下就好了。編寫的時候注意因為最後的結果很大,所以要進行數字壓縮,如果採用100000000進製壓縮的話,最後存結果的陣列只用開到1250就夠了(當然實際開的時候要大一些,不然會re的)

還有需要注意的就是:

(1)存a,b的陣列要大一些10005左右,存結果的陣列1260左右。

(2)輸出的時候如果結果不是存結果陣列的第乙個元素,那麼其他的元素在輸出的時候需要補0用%08d輸出就好。

(3)編寫函式的時候注意進製。

實現**

#include#includevoid mulity(long  *x,int y)

length ++;

for(k=0;k=100000000)

}else

}}int main()

,b[1260]=,c1[1260]=,c2[1260]=,c[1260]=,aa[1260]=,bb[1260]=;

int temp1,temp2,m,j,flag1=0,flag2=0,flag=0;

char ch1[10005],ch2[10005];

scanf("%d",&n);

for(i=0;i=0;j--)

else

}else

else}}

if(z==0)

} return 0;

}

網教10 琪露諾的完美算數教室 的統計I

眾所周知,琪露諾 cirno 是幻想郷 中首屈一指的天才,可以說 就是她的代名詞。然而如今,她遇到了乙個和 有關的難題。你能幫助她麼?題目是這樣的,給出兩個數 a 和 b 0 a b 10 10000 求 a 到 b 之間 包括a和b 的數字中,有多少個數字是包含9的 例如 19,910 等都是包含...

琪露諾的算術教室

time limit 1000ms memory limit 65536kb 給出乙個非負整數a,將這個數字的最低位移動到最高位 原來的最高位變為次高位,次低位變成最低位 得到非負整數b,發現b恰好是a的k倍。現給出a的最低位的值n,和倍數k,求最小的非負整數b。第一行輸入乙個正整數t 1 t 10...

BIT琪露諾的完美演算法教室 3 初上征途的za

題目背景 勵志成為全宇宙第一的口袋妖怪大師 咦?的za終於要踏上了他的旅程。za匆匆忙忙地從大木博士那裡拿了幾個精靈球,從關都地區的真新鎮出發了。沒走幾步,za來到了神奇的皮卡丘森林,眼前躺滿了琳琅滿目的皮卡丘們 好姿勢,請自行腦補 由於是新手,za並不知道哪只皮卡丘的個體值比較高,只好認為其中最肥...