鱼C论坛

 找回密码
 立即注册
查看: 4428|回复: 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 等于几?

输入格式
  1. A B
复制代码


输出格式
  1. 【A % B 的结果】
复制代码


输入样例
  1. 888333 823
复制代码


输出样例
  1. 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
应该是不需要高精度的
版本一(任意输入方式):
  1. #include <iostream>
  2. #include <string>
  3. int main(){
  4.     std::string a;
  5.     uint64_t b;
  6.     uint64_t result = 0;
  7.     std::cin >> a >> b;
  8.     for(const auto c: a){
  9.         result = ((result << 3) + (result << 1) + (c - '0')) % b;
  10.     }
  11.     std::cout << result;
  12.     return 0;
  13. }
复制代码

版本二(需要将输入重定向到文件):
  1. #include <unistd.h>
  2. #include <sys/stat.h>
  3. int main(){
  4.     enum{ BufferSize = 1024 };
  5.     struct stat status;
  6.     unsigned char buffer[BufferSize];
  7.     ssize_t effective_length;
  8.     if(fstat(STDIN_FILENO, &status) == -1){
  9.         return 1;
  10.     }
  11.     off_t seek_offset = status.st_size > 11 ? -11 : -status.st_size;
  12.     if(lseek(STDIN_FILENO, seek_offset, SEEK_END) == -1){
  13.         return 1;
  14.     }
  15.     effective_length = read(STDIN_FILENO, buffer, BufferSize);
  16.     unsigned long b = 0;
  17.     ssize_t i = 0;
  18.     while(buffer[i++] != ' ');
  19.     while(i < effective_length && buffer[i] >= '0' && buffer[i] <= '9'){
  20.         b = (b << 3) + (b << 1) + (buffer[i++] - '0');
  21.     }
  22.     lseek(STDIN_FILENO, 0, SEEK_SET);
  23.     unsigned long result = 0;
  24.     effective_length = i = 0;
  25.     while(1){
  26.         effective_length = read(STDIN_FILENO, buffer, BufferSize);
  27.         for(i = 0; i < effective_length; i++){
  28.             if(buffer[i] == ' ') goto end;
  29.             result = ((result << 3) + (result << 1) + (buffer[i] - '0')) % b;
  30.         }
  31.     }
  32.     end:
  33.     i = 12;
  34.     effective_length = 0;
  35.     if(result == 0){
  36.         effective_length = 1;
  37.         buffer[i--] = '0';
  38.     }
  39.     while(result){
  40.         effective_length++;
  41.         buffer[i--] = (result % 10) + '0';
  42.         result /= 10;
  43.     }
  44.     write(STDOUT_FILENO, buffer + i + 1, effective_length);
  45.     return 0;
  46. }
复制代码

评分

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

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-26 15:31:39 | 显示全部楼层    本楼为最佳答案   
应该是不需要高精度的
版本一(任意输入方式):
  1. #include <iostream>
  2. #include <string>
  3. int main(){
  4.     std::string a;
  5.     uint64_t b;
  6.     uint64_t result = 0;
  7.     std::cin >> a >> b;
  8.     for(const auto c: a){
  9.         result = ((result << 3) + (result << 1) + (c - '0')) % b;
  10.     }
  11.     std::cout << result;
  12.     return 0;
  13. }
复制代码

版本二(需要将输入重定向到文件):
  1. #include <unistd.h>
  2. #include <sys/stat.h>
  3. int main(){
  4.     enum{ BufferSize = 1024 };
  5.     struct stat status;
  6.     unsigned char buffer[BufferSize];
  7.     ssize_t effective_length;
  8.     if(fstat(STDIN_FILENO, &status) == -1){
  9.         return 1;
  10.     }
  11.     off_t seek_offset = status.st_size > 11 ? -11 : -status.st_size;
  12.     if(lseek(STDIN_FILENO, seek_offset, SEEK_END) == -1){
  13.         return 1;
  14.     }
  15.     effective_length = read(STDIN_FILENO, buffer, BufferSize);
  16.     unsigned long b = 0;
  17.     ssize_t i = 0;
  18.     while(buffer[i++] != ' ');
  19.     while(i < effective_length && buffer[i] >= '0' && buffer[i] <= '9'){
  20.         b = (b << 3) + (b << 1) + (buffer[i++] - '0');
  21.     }
  22.     lseek(STDIN_FILENO, 0, SEEK_SET);
  23.     unsigned long result = 0;
  24.     effective_length = i = 0;
  25.     while(1){
  26.         effective_length = read(STDIN_FILENO, buffer, BufferSize);
  27.         for(i = 0; i < effective_length; i++){
  28.             if(buffer[i] == ' ') goto end;
  29.             result = ((result << 3) + (result << 1) + (buffer[i] - '0')) % b;
  30.         }
  31.     }
  32.     end:
  33.     i = 12;
  34.     effective_length = 0;
  35.     if(result == 0){
  36.         effective_length = 1;
  37.         buffer[i--] = '0';
  38.     }
  39.     while(result){
  40.         effective_length++;
  41.         buffer[i--] = (result % 10) + '0';
  42.         result /= 10;
  43.     }
  44.     write(STDOUT_FILENO, buffer + i + 1, effective_length);
  45.     return 0;
  46. }
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 12:17:09 | 显示全部楼层
你有什么话要说吗?
^_^

  1. sh-5.1$ cat main.cpp
  2. #include <iostream>
  3. #include <boost/multiprecision/cpp_int.hpp>

  4. using boost::multiprecision::cpp_int;

  5. int main() {
  6.     cpp_int a, b;
  7.     std::cin >> a >> b;
  8.     std::cout << a % b << std::endl;
  9.     return 0;
  10. }
  11. sh-5.1$ ./main
  12. 888333 823
  13. 316
  14. sh-5.1$
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 12:59:14 From FishC Mobile | 显示全部楼层
厉害,这么多关了,真是给我了个大大的惊喜。我还以为你们都不发了呢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-26 13:35:40 | 显示全部楼层
@zhangjinxuan 下一个我发,已经有经验了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. x = input().split()
  2. print(int(x[0]) % int(x[1]))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

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

怪事,我的回答为什么会被审核,待会再看吧
题解可能需要检查一下,目前有严重的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

准备报废电脑
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,可以,自己选题哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

没必要真的去算
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

红眼特效播放中!!


                               
登录/注册后可看大图

哈哈哈哈哈哈
哎呀,python,没想到你还有今天,哈哈哈哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

                               
登录/注册后可看大图


                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

严重……问题?我的题解?标程有问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢提醒,我 n 忘了初始化
我真的……太尴尬……太丢人了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

啊这......
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

自己选????
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

                               
登录/注册后可看大图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

第21行是不是也有一点问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我太糊涂了

直接从 12期 那里搬过来的,有点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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