题目描述
Michael要给自己的一本已经完成的书编上页码。众所周知,第一页页码是1,第二页页码是2,第三页页码是 3,……。而Michael敲一次键盘就能打出一个数字,例如打出1需要敲一次键盘,打出10需要敲两次键盘。页码编完之后,Michael记得自己总共敲了 n次键盘,问Michael的书有多少页。
输入
输入的第一行是整数T(0 < T <= 100),表示测试数据的组数。每一组测试数据只有一行,只有一个整数n(1 <= n <= 1000),表示Michael敲了n次键盘。该行没有其它多余的符号。
输出
如果有解,则输出书的页数。如果无解,输出-1。
样例输入
3
4
10
11
样例输出
4
-1
10
因为n<=1000所以分三种情况⬇️
1);n<=9 直接可以输出n
2);9<n<=189(*189是因为当页码为三位数时为分界)页码:result=(n-9)/2.0+9;
那如何判断是否存在呢?只要result为整数就ok 所以用下面代码判断👇
if(result-int(result)>0){result=-1;}
3);189<n<=1000 同理:页码:result =(n-189)/3.0+99;
判断👉if(result-int(result)>0){result=-1;}
***因为要这样判断result是否为整数,所以在定义是要double;
#include<stdio.h>
int fact(int n){
double result;
if(n<=9){
result=n;
if(result-int(result)>0){
result=-1;
}
}else if(n>9&&n<=189){
result=(n-9)/2.0+9;
if(result-int(result)>0){
result=-1;
}
}else if (n>189&&n<=1000){
result =(n-189)/3.0+99;
if(result-int(result)>0){
result=-1;
}
}
return result;
}
int main(){
int t,a;
double res;
scanf("%d",&t);
while(t--){
scanf("%d",&a);
res=fact(a);
printf("%0.lf\n",res);
}
return 0;
}
代码用了自定义函数,这样在main里输出就很方便了