眾所周知,琪露諾(チルノ,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秒64m
0 題解:
感覺這個題挺難的,題目寫的很簡單,但是思考量非常大。看了好幾個部落格問了幾個人終於才弄明白。
首先要知道:從0到10^n一共有10^n-9^n個含9的數,在遇到9之前就一直這樣算,遇到9之後就直接加上9之後的那些數即可。
比如13012958就是求10000000的9+3000000的9+10000的9+2000的9+900的9+58(900到957,一共是58個數)
也就是先從前往後走,在遇到9之前算(10^n-9^n)*a,遇到9之後直接加(也就還是a*10^n,就不用減9^n了)
由於資料很大,所以用很多個int陣列來存,最後逐一輸出,除了第乙個之外其他的陣列在輸出的時候都要補字首0.資料有10^10000,而int只存10^8,所以開1300個int陣列就夠儲存的了。
還有要注意的是大數相加相減和相乘,這裡要記得取模進製。
ac**:
#include#include#define mod 100000000
//因為int是有精度範圍的,所以加乙個mod以防止爆int,最後輸出的時候再逐個輸出
#define last 4000
//last是假定的答案最後一位,一開始開太大了就t了 tat
char start[10005], end[10005];
int res1[4005], res2[4005], res[4005];
void add(int a, int ak)
//進製
else break;
} } void multi(int a, int ak)
//進製
} void minus(int a1, int a2, int a3)
for (i = last; i >0; i--)
} }//a1是結果陣列
int ans1[10005] = , ans2[10005];//分別儲存乘10和9
void fun(char a,int b)
if (b == 1)
minus(res1, ans1, ans2);//最後再把它們減一下
else
minus(res2, ans1, ans2);
}
int main()
i = last;
while (res[i] >= mod)
i = 0;
while (!res[i]&&i<=last)
i++;//把字首的0全都跳過去
printf("%d", res[i]);//第乙個不用補0
i++;
while (i <= last)
printf("\n");
} return 0;
}
測試輸入
期待的輸出
時間限制
記憶體限制
額外程序
測試用例 1
以文字方式顯示
1↵0 9↵
以文字方式顯示1↵
1秒64m0
琪露諾的完美算數教室 的統計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並不知道哪只皮卡丘的個體值比較高,只好認為其中最肥...