NOJ/76/main.c
Saturneric 52668c4122 Add.
2020-09-01 00:46:43 +08:00

60 lines
1.4 KiB
C

#include <stdio.h>
#include <string.h>
#define MAX 1024
int sub(char *a, char *b, int lena, int lenb);
int max(char *a, char *b, int lena, int lenb);
int main(void){
char stra[MAX], strb[MAX];
scanf("%s",stra);
scanf("%s",strb);
int i, lena = strlen(stra), lenb = strlen(strb);
int if_zf = 1;
if(stra[0] == '-') stra[0] = 48, if_zf *= -1;
if(strb[0] == '-') strb[0] = 48, if_zf *= -1;
if(!~if_zf) printf("-");
for(i = 0; i < lena; i++) stra[i] -= 48;
for(i = 0; i < lenb; i++) strb[i] -= 48;
int plenb = lenb;
while(max(stra,strb,lena,plenb) >= 0) strb[plenb++] = 0;
if(plenb == lenb) printf("0");
while(plenb > lenb){
int shang = 0;
if(max(stra,strb,lena,plenb) <= 0){
plenb--;
}
while(max(stra,strb,lena,plenb) >= 0) sub(stra,strb,lena,plenb), shang++;
printf("%d",shang);
}
printf("\n");
return 0;
}
int sub(char *a, char *b, int lena, int lenb){
int i, count = lenb-1;
for(i = lena-1; i >= lena - lenb; i--, count--) a[i] = a[i] - b[count];
for(i = lena-1; i >= 0; i--)
if(a[i] < 0){
a[i] += 10;
a[i-1] -= 1;
}
return 0;
}
int max(char *a, char *b, int lena, int lenb){
int i,tlena = lena, tlenb = lenb;
for(i = 0; a[i] == 0; i++) tlena--;
for(i = 0; b[i] == 0; i++) tlenb--;
if(tlena > tlenb) return 1;
else if(tlena == tlenb){
int j = lena - tlena, k = lenb - tlenb;
while(a[j] == b[k] && j < lena && k < lenb) k++,j++;
if(a[j] > b[k]) return 1;
else if(a[j] < b[k]) return -1;
}
else return -1;
return 0;
}