//大数除法(当被除数比除数要小的时候直接取0)
#include<stdio.h> #include<stdlib.h> #include<string.h> #define N 200 int Substract(int num1[],int num2[],int n1,int n2) { int i; if(n1 < n2) return -1; if(n1 == n2) for(i = n1-1; i >= 0; i--) if(num1[i] > num2[i]) break; else if(num1[i] < num2[i]) return -1;//num1比num2小的时候就返回-1 for(i = 0; i < n1; ++i) { num1[i] -= num2[i]; if(num1[i] < 0) { num1[i] += 10; --num1[i+1]; } } for(i = n1-1; i >= 0; --i) if(num1[i] > 0) return i+1; return 0; } int main() { int i,e,j; char s1[N+10],s2[N+10]; int num1[N+10],num2[N+10],num[N+10],n1,n2,n,flag,times; scanf("%d",&n); getchar(); while(n--) { scanf("%s %s",s1,s2); memset(num1,sizeof(num1)); memset(num,sizeof(num)); memset(num2,sizeof(num2)); n1 = strlen(s1); n2 = strlen(s2); if(n1 < n2) { printf("0\n"); continue; } for(i = n1-1,e = -1; i >= 0; --i) num1[++e] = s1[i] - '0'; for(i = n2 -1,e = -1; i >= 0; --i) num2[++e] = s2[i] - '0'; times = n1-n2; if(times > 0) { for(i = n1-1; i >= times; --i) num2[i] = num2[i-times]; for(; i >= 0; --i) num2[i] = 0; n2 = n1; } for(i = 0; i <= times; ++i) { while((flag = (Substract(num1,num2+i,n2-i)))>= 0) { n1 = flag; ++num[times-i]; } } for(i = N; i >= 0&&num[i] == 0; --i); if(i == -1) printf("*0\n"); else {for(; i >= 0; --i) printf("%d",num[i]); putchar(10); } } return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。