循环小数

该博客介绍如何将无限循环小数转化为最简分数,例如将0.333...转换为1/3,0.1919...转换为19/99。内容涉及数学和算法问题,要求在限定时间和内存限制内完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述
循环小数就是如同1/3的小数形式0.3333…… ,小数点后的3是无限的,19/99的小数形式为0.1919……,有无限个19循环。
现在你接到一个任务,就是由无限循环小数,还原回最简分数的形式,且0.3333……我们只用循环子串3表示,0.1919……用循环子串19表示。

解答要求
时间限制:1000ms, 内存限制:64MB
输入
输入一个小数的循环子串s,s的长度不超过10。输入为0时结束输入。

输出
输出循环小数的最简分数形式。

样例
输入样例 1 复制

3
19
0
输出样例 1

1/3
19/99

//we have defined the necessary header files here for this problem.
//If additional header files are needed in your program, please import here.
//a=0.xxb,那么10a=x.xxb;相减即可9a=xb;x=9a/b;    0.333...*10=3.333...  a=0.333...    10a-a=3  a=3/9=1/3 
//a=0.xyxyb,那么100a=xy.xyb;相减即可,99a=xy,xy=99a/b;
//依次类推;
//需要注意的是,样例中有01这样的东西,所以读入分子时候不能读入整数类型,应该按照字符串读入;
//注意最后约分
//求最大公约数,辗转相除法
int gcd(int a,int b)
{
    int temp;
    while(b)
    {
        temp=a%b;
        a=b;
        b=temp;       
    }
    return a;
}
int main(){
    int num;
    char s[10];
    int denominator;
    while(scanf("%s",s))
    {
        if(s[0]=='0'&&s[1]=='\0')
            break;
        denominator=pow(10,strlen(s))-1;                   //分母  比如  1/3=3/9=3/(10-1)
        num=gcd(denominator,atoi(s));                      //字符串转int
        printf("%d/%d\n",atoi(s)/num,denominator/num);
    }

 return 0;
}

### 关于 DeepSeek-R1 模型无法自动映射到分词器的问题 当遇到 `KeyError` 错误提示时,通常是因为所使用的模型与其对应的分词器之间存在不匹配的情况。对于 DeepSeek 的 R1 模型而言,其默认的分词器可能并未被正确加载或者初始化[^1]。 #### 解决方案 为了确保模型能够成功映射至合适的分词器,可以尝试手动指定分词器并验证其兼容性。以下是具体实现方法: 1. **确认模型与分词器的一致性** 需要明确的是,DeepSeek 提供的不同系列模型(如 Llama 或其他变体)可能会依赖不同的分词工具。如果当前模型未提供官方支持的分词器,则需考虑使用第三方库(例如 TikToken),以适配 OpenAI 的编码方式。 2. **引入 TikToken 并自定义分词逻辑** 下面是一个通过 TikToken 实现分词器配置的例子: ```python import tiktoken from transformers import AutoTokenizer, pipeline # 加载 DeepSeek-R1 模型及其对应 tokenizer model_name = "deepseek/r1" tokenizer = AutoTokenizer.from_pretrained(model_name) # 使用 TikToken 获取特定编码方式 encoding = tiktoken.get_encoding("cl100k_base") # 对应 DeepSeek 所需编码标准 def custom_tokenizer(text): tokens = encoding.encode(text) # 转换文本为 token 序列 return tokenizer.convert_tokens_to_string([tokenizer.decode(t) for t in tokens]) # 创建生成管道,并传递自定义函数作为参数 generation_pipe = pipeline( "text-generation", model=model_name, tokenizer=custom_tokenizer, num_return_sequences=1, do_sample=True, eos_token_id=tokenizer.eos_token_id, device_map="auto", # 自动分配设备资源 max_length=2000, top_k=10, top_p=0.9, temperature=0.8, batch_size=1, ) ``` 上述代码片段展示了如何利用 TikToken 来处理潜在的分词冲突问题。其中,“cl100k_base” 是一种常见的字符级编码模式,适用于许多基于 Transformer 架构的大规模预训练语言模型。 3. **调试与验证** 完成以上调整之后,建议运行简单的测试用例来检验新设置的有效性。比如输入一段短语观察输出是否正常工作以及是否存在异常中断现象。 --- #### 注意事项 尽管此方法能够在一定程度上缓解因内置机制不足引发的错误状况,但在实际应用过程中仍需密切关注最新版本更新动态,因为官方团队很可能已经修复此类缺陷或将更优解决方案纳入发行版之中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值