链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
tabris有一个习惯,无聊的时候就会数圈圈,无论数字还是字母。
现在tabris更无聊啦,晚上睡不着觉就开始数羊,从a只数到b只。
顺便还数了a到b之间有多少个圈。
但是tabris笨啊,虽然数羊不会数错,但很可能数错圈的个数。
但是tabris很难接受自己笨这个事实,所以想问问你他一共应该数出多少个圈,这样tabris才好判断他到底笨不笨啊。
输入描述:
输入一个T,表示数据组数
每组测试数据包含两个正整数a,b。
T∈[1,50]
a,b∈[1,106]
输出描述:
每组数据输出结果,并换行。
示例1
输入
复制11 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 1 100
11 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 1 100
输出
复制0 0 0 1 0 1 0 2 1 1 111
0 0 0 1 0 1 0 2 1 1 111
备注:
数字的圈的个数请根据样例自行理解。
把问题复杂化了,一开始用的java,只想着从字符串入手,嵌套很多for循环,最后走不动了(写到最后一个for循环的时候,不知道i该小于几,就这也没联想到while,反而一直想着用for)思维太不灵活了!
其实用一个while与switch语句就能实现,获得每个字符串用取余和除
yxy好厉害呜呜呜太强了
#include<bits/stdc++.h>
using namespace std;
int main(){
int t,a,b;
cin>>t;
while(t--){
long long num =0;
cin>>a>>b;
for(int i=a;i<=b;i++){
int c=i;
while(c){
switch(c%10){
case 1:
case 2:
case 3:
case 5:
case 7:
break;
case 4:
case 6:
case 9:
case 0: num+=1;break;
case 8: num+=2;break;
}
c/=10;
}
}
cout<<num<<endl;
}
return 0;
}