一道ACM题TimeLimit:1 Second MemoryLimit:32 Megabyte Totalsubmit:966 Accepted:85 Description给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:1024 1025 1026 102
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/23 20:28:49
一道ACM题TimeLimit:1 Second MemoryLimit:32 Megabyte Totalsubmit:966 Accepted:85 Description给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:1024 1025 1026 102
一道ACM题
TimeLimit:1 Second MemoryLimit:32 Megabyte
Totalsubmit:966 Accepted:85
Description
给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:
1024 1025 1026 1027 1028 1029 1030 1031 1032
则有10个1出现在这些数中.
Input
输入不会超过500行.每一行有两个数a和b,a和b的范围是0 < a,b < 100000000.输入两个0时程序结束,两个0不作为输入样例.
Output
对于每一对输入的a和b,输出一个数,代表1出现的个数.
Sample Input
1 10
44 497
346 542
1199 1748
1496 1403
1004 503
1714 190
1317 854
1976 494
1001 1960
0 0
Sample Output
2
185
40
666
113
105
1133
512
1375
1256
程序:
#include
#include
using namespace std;
int sum=0,i,j=0,k,l,o,v,q;
int pow(int e,int r)
{
int val=1;
while(r>0)
{
val=val*e;
r--;
}
return val;
}
int num(int n)
{ k=n;
j=0;
if(k==0)
return 0;
while(k!=0)
{
i=k%10;
k=k/10;
j++;
}
if(i==1)
{
if(j==1)
{
return sum++;
}
else
{
l=j;
sum=sum+n-pow(10,l-1)+1;
sum=(l-2)*pow(10,l-2)+pow(10,l-2)+sum;
num(n-pow(10,l-1));
return sum;
}
}
else
{
if(j==1)
return sum=sum+1;
else
{
o=i;
l=j;
sum=o*(l-1)*pow(10,l-2)+pow(10,l-1)+sum;
num(n-o*pow(10,j-1));
return sum;
}
}
j=0;
}
int main()
{
int a,b;
while(scanf("%d %d",&a,&b) &&((a==0&&b!=0)||(a!=0&&b==0)||(a!=0&&b!=0)))
{
if(a
一道ACM题TimeLimit:1 Second MemoryLimit:32 Megabyte Totalsubmit:966 Accepted:85 Description给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:1024 1025 1026 102
你的程序不能正确a与b相等的情况,如:
1 1
2 2
3 3
以下多输出了一个空格:
printf("%d \n",v-q);
改为
printf("%d\n",v-q);