A Za, A Za, Fighting...

坚信:勤能补拙

2011趣题-寻找除法的循环节

代码:

/* 问题: 两整数相除,求循环节 */
/* 分析:
 * 模拟整数相除的步骤,记录每次的商、余,当余重复时即发现循环节 
 * 余的范围为[0, 被除数),因此记录数组的大小可根据被除数确定
 
*/
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>

void
get_circle_digits(unsigned 
int a, unsigned int b)
{
    
int i, mod, tmp, index = 0;
    
int *div = (int *)malloc(sizeof(int* b);
    
int *mod_pos = (int *)malloc(sizeof(int* b);
    memset(mod_pos, 
-1sizeof(int)*b);
    mod 
= a = a%b;
    
while(1) {
        
if(mod==0 || mod_pos[mod]!=-1)
            
break;
        mod_pos[mod] 
= index;
        tmp 
= mod*10;
        div[index] 
= tmp / b;
        mod 
= tmp % b;
        
++index;
    }
    
if(mod == 0
        printf(
"No Circle\n");
    
else {
        printf(
"0.");
        
for(i=0; i<mod_pos[mod]; i++)
            printf(
"%d", div[i]);
        printf(
"(");
        
for(i=mod_pos[mod]; i<index; i++)
            printf(
"%d", div[i]);
        printf(
")");
        printf(
"\n");
    }
}

int
main(
int argc, char **argv)
{
    unsigned 
int a, b;
    
while(scanf("%u %u"&a, &b) != EOF) {
        get_circle_digits(a, b);
    }
    
return 0;
}

posted on 2011-08-17 16:24 simplyzhao 阅读(460) 评论(0)  编辑 收藏 引用 所属分类: R_找工复习2011


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2011年8月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

统计

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜