請問一下我的程序出了什麼問題? 一直卡在這個測資
請各位高手們幫忙。。。謝謝
#include<iostream>
#include<sstream>
#include<cstring>
using namespace std;
int icmp(string s1, string s2){
if(s1.size()>s2.size())
return 0;
else if(s1.size()<s2.size())
return 1;
int l = s1.size();
for(int i = 0; i<l; i++)
if(s1[i]>s2[i])
return 0;
else if(s1[i]<s2[i])
return 1;
return -1;
}
void swapS(string *s1, string *s2){
string tmp = *s1;
*s1 = *s2;
*s2 = tmp;
}
string cut0(string s){
int l0, l = s.size(), i;
for(l0 = 0; l0<l && s[l0] == '0'; l0++);
for(i = 0; i<l-l0+1; i++)
s[i] = s[i+l0];
for(i = 1; i<l && s[i]>='0' && s[i]<='9'; i++);
s.resize(i);
return s;
}
string add(string i1, string i2){
string result = "";
int l1, l2;
if(i1.size()<i2.size())
swapS(&i1, &i2);
l1 = i1.size();
l2 = i2.size();
int isIn = 0;
for(int i = 0; i<l1; i++){
int tmp;
if(l2 - i - 1 >= 0)
tmp = (i1[l1-i-1] + i2[l2-i-1])-2*'0' + isIn;
else
tmp = i1[l1-i-1]-'0' + isIn;
isIn = tmp/10;
tmp %= 10;
result = string(1, (char)(tmp+'0'))+result;
}
if(isIn)result = "1"+result;
return result;
}
string subtract(string i1, string i2){
bool isMinus = false;
if(i2.size()>i1.size() || (i2.size() == i1.size() && i1[0]<i2[0])){
swapS(&i1, &i2);
isMinus = true;
}
string result = "";
int l1 = i1.size(), l2 = i2.size();
int isIn = 0;
for(int i = 0; i<l1; i++){
int tmp;
if(l2 - i - 1>=0)
tmp = i1[l1-i-1] - i2[l2-i-1] - isIn;
else
tmp = i1[l1-i-1] - isIn - '0';
isIn = tmp>=0?0:1;
if(tmp<0)tmp+=10;
result = string(1, (char)(tmp+'0'))+result;
}
result = cut0(result);
if(isMinus)result = "-"+result;
return result;
}
string smTimes(string i1, char i2){
string result = "";
int l = i1.size(), isIn = 0;
i2 -='0';
for(int i = 0; i<l; i++){
int tmp = (i1[l-i-1]-'0')*i2+isIn;
isIn = tmp/10;
tmp %= 10;
result = string(1, (char)(tmp+'0'))+result;
}
if(isIn) result = string(1, (char)(isIn+'0'))+result;
return result;
}
string times(string i1, string i2){
if(i2.size()>i1.size())
swapS(&i1, &i2);
string result = "0";
int l1 = i1.size(), l2 = i2.size();
for(int i = 0; i<l2; i++){
string tmp;
tmp = smTimes(i1, i2[l2-i-1]);
for(int j = 0; j<i; j++)
tmp = tmp+"0";
result = add(tmp, result);
}
return result;
}
string divide(string i1, string i2){
int p = icmp(i1, i2);
if(p == 1)
return "0";
else if(p == -1)
return "1";
int l1 = i1.size(), l2 = i2.size(), resultl = 0;
string result = "";
while(icmp(i1, i2) <= 0){
string mQ = i2;
for(int i = 0; i<l1-l2-resultl; i++){
string tmp = "";
for(int j = 0; j<l1-l2-resultl-i; j++)
tmp += "0";
if(icmp(i1, mQ+tmp) <= 0){
mQ += tmp;
break;
}
}
int q = 0;
int tmp2;
while(icmp(i1, mQ) <= 0){
i1 = subtract(i1, mQ);
q++;
}
result += string(1, (char) (q+'0'));
resultl++;
}
return result;
}
int main(){
string i1, i2, result;
char op;
while(cin>>i1>>op>>i2){
if(op == '+')
result = add(i1, i2);
else if(op == '-')
result = subtract(i1, i2);
else if(op == '*')
result = times(i1, i2);
else if(op == '/')
result = divide(i1, i2);
cout<<result<<endl;
}
return 0;
}