原題目地址:http://bailian.openjudge.cn/practice/2739/
main函數里主要是調用乘法,乘法里邊就是一般的大數乘法
#include <iostream>
#include <cstring>
#define MAX_LEN 200
using namespace std;
int isLarger(char *a,char *b){
int len1=strlen(a);
int len2=strlen(b);
int i,j;
if(len1>len2) return 1;
else if(len1<len2) return -1;
else {
for(i=0,j=0;i<len1;i++,j++){
if(a[i]>b[j]) return 1;
else if(a[i]==b[j]) continue;
else return -1;
}
}
if (i=len1) return 0;
}
void reverse(char *a){
int len,i;
char ch;
len=strlen(a);
for(i=0;i<len/2;i++){
ch=a[i];
a[i]=a[len-i-1];
a[len-i-1]=ch;
}
}
void mul(char *a,char *b){
int tmp=0,carry=0;
char sum[MAX_LEN];
memset(sum,'\0',sizeof(sum));
int len1,len2;
// memset(m,0,sizeof(m));
len1=strlen(a);
len2=strlen(b);
reverse(a);
reverse(b);
for(int i=0;i<len2;i++){
//carry=0;
for(int j=0;j<len1;j++){
tmp=sum[i+j]+(a[j]-'0')*(b[i]-'0');
sum[i+j]=tmp%10;
sum[i+j+1]=tmp/10;
}
}
//int i = 0;
if(sum[len1+len2-1]!='\0'){
for(int i=len1+len2-1;i>=0;i--){
sum[i]+='0';
}
}
else
for(int i=len1+len2-2;i>=0;i--){
sum[i]+='0';
}
//memcpy(a,sum,strlen(sum));
strcpy(a,sum);
reverse(a);
//]='\0';
}
int main()
{
int n,x=0;
char ch;
cin>>n;
char a[MAX_LEN],b[MAX_LEN],c[MAX_LEN];
while(n--){
x=0;
memset(c,'\0',sizeof(c));
memset(b,'\0',sizeof(b));
memset(a,'0',sizeof(a));
a[0]='1';
a[1]='\0';
cin>>c>>b;
int t;
// cout<<a<<"**"<<endl;
while((t=isLarger(a,b))<=0){
// cout<<t<<endl;
// cout<<a<<endl;
mul(a,c);
x++;
}
//cout<<a<<"----";
cout<<x-1<<endl;
}
//cin>>ch;
//memset(result,0,sizeof(result));
return 0;
}