鱼C论坛

 找回密码
 立即注册
查看: 3479|回复: 34

[已解决]【C++板块提升计划】梦想护卫舰 第14期 取余

[复制链接]
发表于 2023-1-26 11:57:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhangjinxuan 于 2023-1-27 22:41 编辑

上一关:细胞分裂
梦想护卫舰 第14期 高精度取余


告别 hanks 博士,梦想护卫舰 再次出发,这时,海面上出现了一头鲸鱼

原来,鲸鱼有一道题目不会,想了 1e9 + 7 天都没有想出来,而鲸鱼听说 聪明才智 的你们会经过这里,便想向你们请教

题目是这样的:

有两个数 A, B。A 是一个合法的正整数,请你求出 A % B 等于几?

输入格式
A B

输出格式
【A % B 的结果】

输入样例
888333 823

输出样例
316

数据范围
以下记 n = A的长度
对于 100% 的数据,1 <= n <= 1e7,1 <= B <= 2e9
对于其中 60% 的数据,1 <= n <= 1000

时间限制:500ms (友情提示,C++评测机跑 1e7 只要 200ms
空间限制:256mb

注意:本题个人原创,转载请注明出处


                               
登录/注册后可看大图


答案与解析
游客,如果您要查看本帖隐藏内容请回复


最佳战士
名字:dolly_yos2
奖励:最佳答案+5鱼币5荣誉


                               
登录/注册后可看大图


鲸鱼为了感谢你,给了你一张藏宝图……

To be continue……

下一关:画树
最佳答案
2023-1-26 15:31:39
应该是不需要高精度的
版本一(任意输入方式):
#include <iostream>
#include <string>
int main(){
    std::string a;
    uint64_t b;
    uint64_t result = 0;
    std::cin >> a >> b;
    for(const auto c: a){
        result = ((result << 3) + (result << 1) + (c - '0')) % b;
    }
    std::cout << result;
    return 0;
}
版本二(需要将输入重定向到文件):
#include <unistd.h>
#include <sys/stat.h>
int main(){
    enum{ BufferSize = 1024 };
    struct stat status;
    unsigned char buffer[BufferSize];
    ssize_t effective_length;
    if(fstat(STDIN_FILENO, &status) == -1){
        return 1;
    }
    off_t seek_offset = status.st_size > 11 ? -11 : -status.st_size;
    if(lseek(STDIN_FILENO, seek_offset, SEEK_END) == -1){
        return 1;
    }
    effective_length = read(STDIN_FILENO, buffer, BufferSize);
    unsigned long b = 0;
    ssize_t i = 0;
    while(buffer[i++] != ' ');
    while(i < effective_length && buffer[i] >= '0' && buffer[i] <= '9'){
        b = (b << 3) + (b << 1) + (buffer[i++] - '0');
    }
    lseek(STDIN_FILENO, 0, SEEK_SET);
    unsigned long result = 0;
    effective_length = i = 0;
    while(1){
        effective_length = read(STDIN_FILENO, buffer, BufferSize);
        for(i = 0; i < effective_length; i++){
            if(buffer[i] == ' ') goto end;
            result = ((result << 3) + (result << 1) + (buffer[i] - '0')) % b;
        }
    }
    end:
    i = 12;
    effective_length = 0;
    if(result == 0){
        effective_length = 1;
        buffer[i--] = '0';
    }
    while(result){
        effective_length++;
        buffer[i--] = (result % 10) + '0';
        result /= 10;
    }
    write(STDOUT_FILENO, buffer + i + 1, effective_length);
    return 0;
}

评分

参与人数 3荣誉 +10 鱼币 +7 贡献 +9 收起 理由
高山 + 5 + 5 + 3
liuhongrun2022 + 2 + 2 + 3 梦想护卫舰有你更精彩^_^
sfqxx + 3 + 3 给我的帖子也支持一下

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-26 15:31:39 | 显示全部楼层    本楼为最佳答案   
应该是不需要高精度的
版本一(任意输入方式):
#include <iostream>
#include <string>
int main(){
    std::string a;
    uint64_t b;
    uint64_t result = 0;
    std::cin >> a >> b;
    for(const auto c: a){
        result = ((result << 3) + (result << 1) + (c - '0')) % b;
    }
    std::cout << result;
    return 0;
}
版本二(需要将输入重定向到文件):
#include <unistd.h>
#include <sys/stat.h>
int main(){
    enum{ BufferSize = 1024 };
    struct stat status;
    unsigned char buffer[BufferSize];
    ssize_t effective_length;
    if(fstat(STDIN_FILENO, &status) == -1){
        return 1;
    }
    off_t seek_offset = status.st_size > 11 ? -11 : -status.st_size;
    if(lseek(STDIN_FILENO, seek_offset, SEEK_END) == -1){
        return 1;
    }
    effective_length = read(STDIN_FILENO, buffer, BufferSize);
    unsigned long b = 0;
    ssize_t i = 0;
    while(buffer[i++] != ' ');
    while(i < effective_length && buffer[i] >= '0' && buffer[i] <= '9'){
        b = (b << 3) + (b << 1) + (buffer[i++] - '0');
    }
    lseek(STDIN_FILENO, 0, SEEK_SET);
    unsigned long result = 0;
    effective_length = i = 0;
    while(1){
        effective_length = read(STDIN_FILENO, buffer, BufferSize);
        for(i = 0; i < effective_length; i++){
            if(buffer[i] == ' ') goto end;
            result = ((result << 3) + (result << 1) + (buffer[i] - '0')) % b;
        }
    }
    end:
    i = 12;
    effective_length = 0;
    if(result == 0){
        effective_length = 1;
        buffer[i--] = '0';
    }
    while(result){
        effective_length++;
        buffer[i--] = (result % 10) + '0';
        result /= 10;
    }
    write(STDOUT_FILENO, buffer + i + 1, effective_length);
    return 0;
}

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
元豪 + 5 + 5 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 12:17:09 | 显示全部楼层
你有什么话要说吗?
^_^
sh-5.1$ cat main.cpp
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>

using boost::multiprecision::cpp_int;

int main() {
    cpp_int a, b;
    std::cin >> a >> b;
    std::cout << a % b << std::endl;
    return 0;
}
sh-5.1$ ./main
888333 823
316
sh-5.1$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 12:59:14 From FishC Mobile | 显示全部楼层
厉害,这么多关了,真是给我了个大大的惊喜。我还以为你们都不发了呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 13:35:40 | 显示全部楼层
@zhangjinxuan 下一个我发,已经有经验了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 13:47:45 | 显示全部楼层
高精度,不存在的~~
x = input().split()
print(int(x[0]) % int(x[1]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-1-26 15:41:23 | 显示全部楼层
本帖最后由 dolly_yos2 于 2023-1-26 21:22 编辑

怪事,我的回答为什么会被审核,待会再看吧
题解可能需要检查一下,目前有严重的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 17:16:16 | 显示全部楼层
元豪 发表于 2023-1-26 13:47
高精度,不存在的~~

准备报废电脑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 18:51:21 | 显示全部楼层
高山 发表于 2023-1-26 12:59
厉害,这么多关了,真是给我了个大大的惊喜。我还以为你们都不发了呢。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 18:51:54 | 显示全部楼层
sfqxx 发表于 2023-1-26 13:35
@zhangjinxuan 下一个我发,已经有经验了

好的,可以,自己选题哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 18:52:24 | 显示全部楼层
dolly_yos2 发表于 2023-1-26 15:41
怪事,我的回答为什么会被审核,待会再看吧
题解可能需要检查一下,目前有严重的问题

没必要真的去算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 18:54:44 | 显示全部楼层
元豪 发表于 2023-1-26 13:47
高精度,不存在的~~

超时了~~~~~~哈哈哈哈哈
只有 60 分

红眼特效播放中!!


                               
登录/注册后可看大图

哈哈哈哈哈哈
哎呀,python,没想到你还有今天,哈哈哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 19:06:07 | 显示全部楼层
元豪 发表于 2023-1-26 13:47
高精度,不存在的~~

真超时了,我搞了个数据生成器,哈哈,1e6 就超时啦~~~~

                               
登录/注册后可看大图


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 19:10:08 | 显示全部楼层
dolly_yos2 发表于 2023-1-26 15:41
怪事,我的回答为什么会被审核,待会再看吧
题解可能需要检查一下,目前有严重的问题

严重……问题?我的题解?标程有问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 19:11:50 | 显示全部楼层
dolly_yos2 发表于 2023-1-26 15:41
怪事,我的回答为什么会被审核,待会再看吧
题解可能需要检查一下,目前有严重的问题

感谢提醒,我 n 忘了初始化
我真的……太尴尬……太丢人了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 19:20:50 | 显示全部楼层
zhangjinxuan 发表于 2023-1-26 19:06
真超时了,我搞了个数据生成器,哈哈,1e6 就超时啦~~~~

啊这......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 19:29:56 | 显示全部楼层
zhangjinxuan 发表于 2023-1-26 18:51
好的,可以,自己选题哈

自己选????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 19:30:35 | 显示全部楼层

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 19:37:46 | 显示全部楼层
zhangjinxuan 发表于 2023-1-26 19:11
感谢提醒,我 n 忘了初始化
我真的……太尴尬……太丢人了

第21行是不是也有一点问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-26 19:49:32 | 显示全部楼层
dolly_yos2 发表于 2023-1-26 19:37
第21行是不是也有一点问题?

我太糊涂了

直接从 12期 那里搬过来的,有点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表