日剧与挂机游戏

Description

banfcc最近迷上了一款挂机游戏。
这个游戏挂1分钟升到1级,再挂10分钟升到2级,再挂100分钟升到3级,以此类推……
因为banfcc还要肝日剧,所以很久没有管这个游戏,现在告诉你他挂机了多久,聪明的小朋友能算出他已经几级了吗?

Input

多组数据

第一行一个T(1<=T<=1000)代表数据组数

接下来T行每行一个数字n代表挂机的时间(0<=n<=101000)

保证没有前导0

Output

一个整数k代表等级数

Sample Input

13
0
1
10
11
10000
90000
11211
11109
11201
11111111111111111111
123456789123456789123456789123456789123456789
10211
210
Sample Output

0
1
1
2
4
5
5
4
5
20
45
4
3

思路:
因为输入较大,数值类型实现不了,所以得用字符串类型,存储在数组里也方便读取某个位上的值。
1级是1分钟,2级是11分钟,3级是111分钟,四级是1111分钟,n级就是nnn…n(n个 n)分钟。
核心是判断这个输入的数是大于等于1111…11(n个1),小于1111…11(n+1个1),便可判断出这个数是n级
我们可以弄个循环,从第一位开始往后逐个取出当前位置的数进行判断。
首先看第一位就可大致判断出有多少级。
如果第一位是大于1的数,那么这个输入的数肯定大于1111…11(n个1),小于1111…1(n+1个1),也就是n级,还不到n+1级,可以直接输出,跳出循环了。
如果第一位等于1,就得往后看,如果接下来的位上是大于1的数,输入的数也就同上,大于1111…11(n个1),小于1111…11(n+1个1),等级也同上,为n级,可输出后退出循环。
以此类推。
但若从第二位开始,前面都是1,后面有位上的数是0,那说明这个数是小于1111…11(n个1)的,但是大于1111…11(n-1个1),同样也可以直接输出,跳出循环。
如果每个位上都是1,那就是等于1111…11(n个1)了,为n级。

#include<stdio.h>
#include<string.h>
int main(){
	int i,j,n,t,s;
	scanf("%d",&t);
	char x[1010];
	while(t--){
		scanf("%s",x);
		n=strlen(x);
		s=n;
		for(i=0;i<n;i++){
			if(x[i]>49)//大于1
			{
				printf("%d\n",s);//大于1111.....11(s个1)了,直接输出
				break;
			}
			else if(x[i]==48){//等于0
				s--;//小于1111.....11(s个1)了,减去1后直接输出
				printf("%d\n",s);
				break;
			}
			if(i==n-1&&x[i]==49)//如果全都是1
			printf("%d\n",s);
		}
	}
	return 0;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值