1 #include <stdio.h>
2 int max (int a, int b)
3 {
4 if(a>b) return a ;
5 else return b ;
6 }
7 char a[100000000];
8 char b[100000000];
9 int a1[100000000];
10 int b1[100000000];
11 int c[100000000];
12 int len_a,len_b,i;
13 int main ()
14 {
15 gets(a);
16 gets(b);
17 while(a[len_a]>='0'&&a[len_a]<='9') len_a ++;
18 while(b[len_b]>='0'&&b[len_b]<='9') len_b ++;
19 //printf("%d %d\n",len_a,len_b);
20 int len = max (len_a,len_b);
21 for(i=0;i<len_a;i++)
22 a1[len_a-i-1] = a[i] - '0' ;
23
24 for(i=0;i<len_b;i++)
25 b1[len_b-i-1] = b[i] - '0' ;
26
27 //for(i=0;i<len_a;i++)
28 //printf("%d",a1[i]);
29 //printf("\n");
30 //for(i=0;i<len_b;i++)
31 //printf("%d",b1[i]);
32
33 for (i=0;i<len;i++)
34 c[i] = a1[i] - b1 [i];
35 for (i=0;i<len;i++)
36 if (c[i]<0) c[i]+=10,c[i+1]-=1;
37
38 //for(i=len-1;i>=0;i--)
39 //printf("%d",c[i]);
40 //printf("\n");
41 while(c[len-1]== 0&&len) len--;
42 if(len==0) printf("0");
43 for(i=len-1;i>=0;i--)
44 printf("%d",c[i]);
45
46 }
其中判断 && len 的很重要! 不然会造成无法相减相同的数!
#include <stdio.h>
int gcd (int a,int b )
{
if(b==0)return a ;
else return gcd(b,a%b);
}
int main ()
{
int l,i,j,right,left;
double a ,b,dif ,product;
scanf("%lf%lf%d",&a,&b,&l);
double quotient = a / b ;
//printf("%lf",quotient);
double min = 1e9 + 7 ;
for(i=1;i<=l;i++)
for(j=1;j<=l;j++)
{
dif = (double) (i) / (double )(j) - quotient ;
product = (double) (i) / (double )(j) ;
//printf("%lf %lf\n",dif,product);
if(gcd(i,j)== 1 && dif>= 0 && dif < min )
{
left = i ;
right = j ;
min = dif;
}
}
printf("%d %d",left,right);
}
咳咳,还有这个简化比例,一定要完善判断边缘条件! (比如等于含与近似)