HDU2099 整除的尾数【模除】

2019-04-14 16:22发布

 

整除的尾数

  Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 44553    Accepted Submission(s): 18940
    Problem Description 一个整数,只知道前几位,不知道末二位,被另一个整数除尽了,那么该数的末二位该是什么呢?     Input 输入数据有若干组,每组数据包含二个整数a,b(0 200 40 1992 95 0 0     Sample Output   00 40 80 15     Source 2007省赛集训队练习赛(2)         问题链接HDU2099 整除的尾数 问题简述:参见上述链接。 问题分析 开始时,采用枚举法来解,当时用C语言写了程序。后面又找到了好办法,用C++语言重写了程序,可以有个比较。   新写的程序放在前面。     这个问题使用枚举法进行求解,并不是一个难题。要点有以下3点:   1.读题,正确处理输入;   2.按照要求输出结果,即输出两位整数且前面补0;   3.控制空格,即最后一个数不能输出后面的空格,只是程序技巧的问题。   采用枚举法,虽然简单易行,本程序也AC了。然而执行时间长,应该有更加巧妙快速的实现方法。 程序说明:(略)。   AC的C++语言程序如下(非枚举):   /* HDU2099 整除的尾数 */ #include using namespace std; const int MOD = 100; int main() { int a, b, min; while(cin >> a >> b) { if(a == 0 && b == 0) break; // 计算最小的答案 min = (b - a * MOD % b) % b; // 循环输出结果 for(int i=min; i           AC的C++语言程序如下(枚举法):   /* HDU2099 整除的尾数 */ #include using namespace std; const int MOD = 100; int main() { int a, b, count; while(cin >> a >> b) { if(a == 0 && b == 0) break; a *= MOD; count = 0; for(int i=0; i 1) printf(" "); printf("%02d", i); } printf(" "); } return 0; }           AC的C语言程序如下:   /* HDU2099 整除的尾数 */ #include int main(void) { int a, b, i; for(;;) { scanf("%d%d", &a, &b); if(a==0 && b==0) break; int count = 0; a *= 100; for(i=0; i<100; i++) if((a+i)%b == 0) { if(++count > 1) printf(" "); printf("%02d", i); } printf(" "); } return 0; }