高精度。
#include <stdio.h>
#include <string.h>
void sum( char *s1, char *s2, char *data ) {
int arr[1000];
int i,j,k,l1,l2,c;
l1 = strlen(s1);
l2 = strlen(s2);
c = 0;
k=0;
for ( i=l1-1,j=l2-1;i>=0&&j>=0;i--,j-- ) {
arr[k]=(s1[i]-'0'+s2[j]-'0'+c)%10;
c=(s1[i]-'0'+s2[j]-'0'+c)/10;
k++;
}
if ( i==-1&&j==-1 ) {
arr[k]=c;
k++;
}
else if ( i==-1 ) {
while ( j!=-1 ) {
arr[k] = (s2[j]-'0'+c)%10;
c = (s2[j]-'0'+c)/10;
k++;
j--;
}
}
else if ( j==-1 ) {
while ( i!=-1 ) {
arr[k] = (s1[i]-'0'+c)%10;
c = (s1[i]-'0'+c)/10;
k++;
i--;
}
}
while ( arr[k-1]==0 )
k--;
i = 0;
for ( j=k-1;j>=0;j-- ) {
data[i] = arr[j]+'0';
i++;
}
data[i] = '\0';
}
void mul( char *a, int b, char *s ){
int l,arr[110];
int i,j,c;
l=strlen( a );
c=0;
j=0;
for ( i=l-1;i>=0;i-- ) {
arr[j]=((a[i]-'0')*b+c)%10;
c=((a[i]-'0')*b+c)/10;
j++;
}
arr[j]=c;
while ( arr[j]==0 )
j--;
i=0;
for (;j>=0;j--) {
s[i]=arr[j]+'0';
i++;
}
s[i]='\0';
}
int main()
{
char s[6][120];
char a[110];
int num[6];
char temp[110];
char result[110];
int i,j,k,l,n,b,v;
scanf( "%d",&n );
while ( n-- ) {
scanf( "%s%d",&a,&b );
i=0;
v=b;
while ( b!=0 ) {
num[i]=b%10;
b=b/10;
i++;
}
for ( j=0;j<i;j++ ) {
mul(a,num[j],s[j]);
l=strlen(s[j]);
for ( k=0;k<j;k++ ) {
s[j][l+k]='0';
}
s[j][l+k]='\0';
}
strcpy(temp,"0");
for ( j=0;j<i;j++ ) {
sum(s[j],temp,result);
strcpy(temp,result);
}
if (strcmp(result, "")==0||v==0)
printf( "0\n" );
else
printf( "%s\n",result );
}
return 0;
}