#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int check(int t[500]){//判斷餘數正負
int i;
for(i=0;i<499;i++){
while(t[i]>=10){
t[i+1]++;
t[i]-=10;
}
while(t[i]<0){
t[i]+=10;
t[i+1]--;
}
}
for(i=499;t[i]==0&&i>0;i--);
if(t[i]<0) return 0;//代表 t<0
else return 1;//代表 t>=0
}
void function(int t[1000]){//進位捨位並輸出
int i;
for(i=0;i<999;i++){
while(t[i]>=10){
t[i+1]++;
t[i]-=10;
}
while(t[i]<0){
t[i]+=10;
t[i+1]--;
}
}
for(i=999;t[i]==0&&i>0;i--);
if(t[i]<0){
for(i=0;i<1000;t[i]*=-1,i++);
printf("-");
function(t);
}
else{
for(i=999;t[i]==0&&i>0;i--);
for(;i>=0;printf("%d",t[i]),i--);
printf("\n");
}
}
void plus(int n[500],int m[500],int len){
int t[1000]={0};
int i;
for(i=0;i<len;t[i]=n[i]+m[i],i++);
function(t);
}
void minus(int n[500],int m[500],int len){
int t[1000]={0};
int i;
for(i=0;i<len;t[i]=n[i]-m[i],i++);
function(t);
}
void cross(int n[500],int m[500],int x,int y){
int t[1000]={0};
int i,j;
for(i=0;i<x;i++)
for(j=0;j<y;t[i+j]+=n[i]*m[j],j++);
function(t);
}
void divide(int n[500],int m[500],int x,int y){
int t[1000]={0};
int i,j,k;
for(i=x-y;i>=0;i--){
for(j=0;check(n)==1;j++){
for(k=0;k<y;k++){
n[k+i]-=m[k];
}
}
t[i]=j-1;
for(k=0;k<y;k++){
n[k+i]+=m[k];
}
}
function(t);
}
int main(){
char x[500],y[500],s[1];
while(scanf("%s %s %s",x,s,y)!=EOF){
int n[500]={0};
int m[500]={0};
int len;
for(int i=0;i<strlen(x);n[i]=x[strlen(x)-i-1]-48,i++);
for(int i=0;i<strlen(y);m[i]=y[strlen(y)-i-1]-48,i++);
if(strlen(x)>=strlen(y)) len=strlen(x);
else len=strlen(y);
if (s[0]==43) plus(n,m,len);
else if(s[0]==45) minus(n,m,len);
else if(s[0]==42) cross(n,m,strlen(x),strlen(y));
else if(s[0]==47) divide(n,m,strlen(x),strlen(y));
}
return 0;
}
似乎跑完第一組測資就掛了
測試了很久應該沒有無窮迴圈耶...
感覺運算時間也沒有很久
不知道為什麼會tle
誰能幫幫我