1)“第一个大于等于a,且是X的倍数”的数是 (a/X)向上取整,然后乘以x
“第一个大于等于a,且是X的倍数,且不是100X倍数”的数是 (a/X)向上取整,如果它是100的倍数的话,再加一,然后乘以X
2)设第一个【X数】是1*X,那么Y是第几个【X数】?
答:因为每连续的100个【X的倍数】要被舍弃掉一个100X的倍数,所以Y是第 Y/X - Y/X/100 个【X数】
例如 1X 是第 1 个【X数】
例如 99X 是第 99 个【X数】
例如 101X 是第 100 个【X数】
错误的是,按上面的公式求得 -1X 是第 -1 个【X数】,这就不对了,既然设 1X 是第一个【X数】,那么 -1X 就应该是第0个【X数】。也就是负数的话,需要增加1。
3)求第n个【X数】是多少?也就是求2)的反函数
解:设结果是 (100p+q)X,其中 0<q<100
那么按照2)的结论有 (100p+q) - (100p+q)/100 = n,化简得 (n-q)/99 = p
例如求第100个【X数】,因为 (100-1)/99=1,即p=1,1=1,结果是 (1*100+1)X = 101X
例如求第99个【X数】,因为 (99-99)/99=1,即p=0,q=99,结果是 (0*100+99)X = 99X
例如求第0个【X数】,因为 (0-99)/99=-1,即p=-1,q=99,结果是 (-1*100+99)X = -X
例如求第-1个【X数】,因为 (-1-98)/99=-1,即p=-1,q=98,结果是 (-1*100+98)X = -2X

程序代码:
#include <iostream>
using namespace std;
int main( void )
{
size_t T;
cin >> T;
while( T-- )
{
int x, a, b;
cin >> x >> a >> b;
// 求【第一个大于a的【x数】】是x的几倍
int t = (a>=0)
? (a+x-1)/x + ((a+x-1)/x%100==0)
: a/x + (a/x%100==0);
// 求 tx 是第几个【x数】
int m = t - t/100;
m += m<0;
// 求第 n 个【x数】是多少
int n = m + (b-1);
int q = n%99==0 ? 99 : (n%99+99)%99;
int p = (n-q)/99;
int result = (p*100 + q)*x;
cout << result << '\n';
}
}