#include<stdio.h>
int main()
{
char string[1003];
int j,k,m,n,r,len1,len2,temp;
while(gets(string)!=NULL){
int i=0,count=0,a=0,b=0,flag=1,p=0;
int number[500]={};
int buffer[500]={};
int remain[500]={};
for(i=0; ;i++){
if(string[i]==' ')
a=i;
else if(string[i]=='\0'){
b=i;
break;
}
if(string[i]>=48 && string[i]<=57)
string[i]-=48;
}
len1=a-2;
len2=b-a-1;
if(string[a-1]=='+'){
if(len1>len2){
for(j=0;j<len1;j++){
if(j<len2)
number[j]=string[a-3-j]+string[b-1-j]+count;
else
number[j]=string[a-3-j]+count;
count=0;
if(number[j]>=10){
number[j]-=10;
count++;
}
}
}
else if(len1==len2){
for(j=0;j<len1;j++){
number[j]=string[a-3-j]+string[b-1-j]+count;
count=0;
if(number[j]>=10){
number[j]-=10;
count++;
}
}
}
else{
for(j=0;j<len2;j++){
if(j<len1)
number[j]=string[a-3-j]+string[b-1-j]+count;
else
number[j]=string[b-1-j]+count;
count=0;
if(number[j]>=10){
number[j]-=10;
count++;
}
}
}
if(count==1)
printf("1");
for(k=j-1;k>=0;k--){
printf("%d",number[k]);
}
printf("\n");
}
else if(string[a-1]=='-'){
if(len1>len2){
for(j=0;j<len1;j++){
if(j<len2)
number[j]=string[a-3-j]-string[b-1-j]-count;
else
number[j]=string[a-3-j]-count;
count=0;
if(number[j]<0){
number[j]+=10;
count++;
}
}
}
else if(len1==len2){
for(j=0;j<len1;j++){
if(string[j]-string[a+1+j]>0){
flag=1;
break;
}
else if(string[j]-string[a+1+j]<0){
flag=0;
break;
}
else
continue;
}
for(j=0;j<len1;j++){
if(flag==1)
number[j]=string[a-3-j]-string[b-1-j]-count;
else
number[j]=string[b-1-j]-string[a-3-j]-count;
count=0;
if(number[j]<0){
number[j]+=10;
count++;
}
}
}
else{
for(j=0;j<len2;j++){
flag=0;
if(j<len1)
number[j]=string[b-1-j]-string[a-3-j]-count;
else
number[j]=string[b-1-j]-count;
count=0;
if(number[j]<0){
number[j]+=10;
count++;
}
}
}
if(flag==0)
printf("-");
for(k=j-1;k>=0;k--){
if(number[k]!=0)
break;
}
for(m=k;m >=0;m--)
printf("%d",number[m]);
printf("\n");
}
else if(string[a-1]=='*'){
for(j=0;j<len2;j++){
for(n=0;n<len1;n++)
number[n+j]+=string[a-3-n]*string[b-1-j];
}
for(m=0;m <n+j-2;m++){
if(number[m]>=10){
temp=number[m];
number[m]=temp%10;
number[m+1]+=(int)temp/10;
}
}
if(number[m]!=0)
printf("%d",number[m]);
for(k=m-1;k>=0;k--)
printf("%d",number[k]);
printf("\n");
}
else if(string[a-1]=='/'){
for(j=len2-1;j<len1;j++){
for(k=1;k<=9;k++){
for(m=0;m <len2;m++){
buffer[j-m]=k*string[b-1-m]+count;
count=0;
if(buffer[j-m]>=10){
count=(int)buffer[j-m]/10;
buffer[j-m]%=10;
}
}
if(count!=0)
buffer[j-m]=count;
count=0;
for(m=0;m <=j;m++){
if(buffer[m]>string[m]){
flag=0;
break;
}
else if(buffer[m]<string[m]){
flag=1;
break;
}
else
continue;
}
if(flag==0)
break;
}
flag=1;
number[p]=k-1;
for(m=0;m <len2;m++){
remain[j-m]=number[p]*string[b-1-m]+count;
count=0;
if(remain[j-m]>=10){
count=(int)remain[j-m]/10;
remain[j-m]%=10;
}
}
if(count!=0)
remain[j-m]=count;
count=0;
p++;
for(m=0;m <len2;m++){
string[j-m]=string[j-m]-remain[j-m]-count;
count=0;
if(string[j-m]<0){
string[j-m]+=10;
count++;
}
}
if(count!=0)
string[j-m]--;
else if(string[j-m]!=0)
string[j-m]=string[j-m]-remain[j-m];
count=0;
for(m=0;m <=j;m++)
buffer[m]=0;
}
for(m=0;m <p;m++){
if(number[m]!=0)
break;
}
for(r=m;r<p;r++)
printf("%d",number[r]);
printf("\n");
}
}
return 0;
}
OJ說我輸出了八行
但是我的作法 測資最多只有一行
怎麼會這樣?
我也有遇到這種情況,假設你的運算都正確的話
你可能沒有考慮到 / 0 或者 兩樹相減 為 0 的情況,這兩種情況要輸出 0
參考看看~
我也遇過這個狀況,第九行是 21454 / 112343... 輸出會是0,
1.檢查你的資料能否顯示0
2.檢查你的除法 當 小/大 的時候 你的程式碼能否正常運作