For each test case: Two number a,b;
0 <= a <= 10^100, 0 <= b <= 10^7
2 9 1 9 2
Case #1: 1 Case #2: 3
//
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=150;
void out(int a[maxn],int la)
{
for(int i=0;i<la;i++) printf("%d",a[i]);printf("\n");
}
int OK(int a[maxn],int la,int b[maxn],int lb)//判断a是否包含b
{
for(int i=0;i<la;i++)
{
int j;
for(j=0;j<lb&&i+j<la;j++)
{
if(b[j]!=a[i+j]) break;
}
if(j==lb) return 1;
}
return 0;
}
int compare(int a[maxn],int la,int b[maxn],int lb)
{
if(la<lb) return -1;
if(la>lb) return 1;
for(int i=0;i<la;i++)
{
if(a[i]>b[i]) return 1;
else if(a[i]<b[i]) return -1;
}
return 0;
}
//a>b a-b=c
void sub(int a[maxn],int la,int b[maxn],int lb,int c[maxn],int &lc)
{
lc=0;
int i=la-1,j=lb-1;
for(;i>=0&&j>=0;i--,j--)
{
if(a[i]>=b[j]) c[lc++]=a[i]-b[j];
else
{
c[lc++]=a[i]+10-b[j];
a[i-1]--;
}
}
for(int k=i;k>=0;k--) if(a[k]<0) a[k]+=10,a[k-1]--;
for(;i>=0;i--)c[lc++]=a[i];
for(int k=lc-1;k>=0;k--)
{
if(c[k]==0) lc--;
else break;
}
reverse(c,c+lc);
}
int a[maxn],b[maxn],c[maxn];
int la,lb,lc;
char str[maxn];
int len;
int ans[maxn];
int lans;
int f[maxn],g[maxn];
int lf,lg;
int main()
{
int ci,pl=1;scanf("%d",&ci);
while(ci--)
{
lans=-1;
scanf("%s",str);
len=strlen(str);la=len;
for(int i=0;i<len;i++) a[i]=str[i]-'0';
scanf("%s",str);
len=strlen(str);lb=len;
for(int i=0;i<len;i++) b[i]=str[i]-'0';
printf("Case #%d: ",pl++);
if(OK(a,la,b,lb))
{
printf("0\n");
continue;
}
//a<b
if(compare(a,la,b,lb)<0)
{
sub(b,lb,a,la,c,lc);
out(c,lc);
continue;
}
//a>b
for(int now=la-1;now>=-1;now--)//枚举b的末尾在a中的位置
{
int l=now+1-lb,r=now;
len=lb;
int flag=0;
if(l>=0){
for(int i=l,j=0;i<=r;i++,j++)
{
if(a[i]>b[j]) flag=1;
else if(a[i]<b[j]) flag=-1;
if(flag) break;
}
}
else flag=-1;
lf=lg=0;
for(int i=max(l,0);i<la;i++) f[lf++]=a[i];
if(flag<0)
{
for(int i=0;i<lb;i++) g[lg++]=b[i];
for(int i=r+1;i<la;i++) g[lg++]=0;
}
else
{
g[lg++]=1;
for(int i=0;i<lb;i++) g[lg++]=b[i];
for(int i=r+1;i<la;i++) g[lg++]=0;
}
sub(g,lg,f,lf,c,lc);
if(lans==-1||compare(c,lc,ans,lans)<0)
{
lans=lc;
memcpy(ans,c,sizeof(c));
}
}
out(ans,lans);
}
return 0;
}