acm AC
這裡TLE
請問原因在哪?
以下為程式碼
#include <iostream>
using namespace std;
string Add(string ,string );
string Mul(string ,string );
string DelFirstZero(string );
int main()
{
string a,b;
while(cin>>a>>b)
{
if(cin.fail())
break;
cout<<Mul(a,b)<<endl;
}
}
string Add(string addsum,string b)
{
if(addsum.length()<b.length())//addsum length is big
{
string temp=addsum;
addsum=b;
b=temp;
}
for(int i=addsum.length()-1,j=b.length()-1;i>=0;i--,j--)
{
if(j>=0)
addsum[i]=addsum[i]+b[j]-48;
if(addsum[i]>57)//Carry
{
addsum[i]-=10;
if(i==0) //the last number
addsum="1"+addsum;
else
addsum[i-1]++;
}
}
return addsum;
}
string Mul(string a,string b)
{
string mulsum="0";
for(int j=b.length()-1;j>=0;j--)
{
for(int i=a.length()-1;i>=0;i--)
{
//one by one to add
string temp="";
temp+=(int)(b[j]-48)*(int)(a[i]-48)/10+48;
temp+=(int)(b[j]-48)*(int)(a[i]-48)%10+48;
for(int k=(a.length()-1-i);k>0;k--)
temp+="0";
for(int k=(b.length()-1-j);k>0;k--)
temp+="0";
mulsum=Add(temp,mulsum);
}
}
while((mulsum[0]=='0')&&(mulsum.length()!=1))//last mul get more zero
{
mulsum=DelFirstZero(mulsum);
}
return mulsum;
}
string DelFirstZero(string s)
{
string temp="";//new size
for(int i=1;i<s.length();i++)
{
temp+=s[i];
}
return temp;
}
這裡測資比UVa大個6~8倍左右.....
如果你在UVa速度並不快的話....就想法子加速.....
這裡測資比UVa大個6~8倍左右.....
如果你在UVa速度並不快的話....就想法子加速.....
輸入測資: (1110 lines, 123315 Bytes)
輸出測資: (555 lines, 122370 Bytes)
555筆測資.