| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
如此水题,PE两次第一次是没看到输出换行,第二次是没注意如果长度刚好是50的倍数的时猴,最后不能输出换行,厕试数据竟然刚好有长度是50倍数的,醉了
#include <iostream>
#include <stdio.h>
using namespace std;
int GCD(int A, int B){
if(A == 0) return B;
if(B == 0) return A;
if(A <= B) return GCD(A, B%A);
return GCD(B, A%B);
}
int MAX(int a, int b){
return a>b ? a : b;
}
int main() {
int A, B;
while(1){
scanf("%d%d", &A, &B);
if(A == 0 && B == 0) return A+B;
int gcd = GCD(A, B);
A /= gcd;
B /= gcd;
int two = 0, five = 0;
int C = B;
while(C%2 == 0){
two++;
C /= 2;
}
while(C%5 == 0){
five++;
C /= 5;
}
int K = MAX(two, five);
if(C == 1){
printf(".");
for(int i = 0; i < K; i++){
printf("%d", A*10/B);
A = (A*10)%B;
}
printf("\nThis expansion terminates.\n");
continue;
}
int D = 0;
int prod = 1;
while(1){
prod = (prod*10)%C;
D ++;
if(prod == 1) break;
}
int cf = D+K;
printf(".");
int alr = 1;
for(int i = 0; i < cf; i++){
printf("%d", A*10/B);
A = (A*10)%B;
alr ++;
if(alr%50 == 0 && i != cf-1){//一定要判断是否是最后一个
printf("\n");
}
}
printf("\nThe last %d digits repeat forever.\n", D);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator